js __proto__ prototype constructor
js __proto__ prototype constructor
小张525 发表于1年前
js __proto__ prototype constructor
  • 发表于 1年前
  • 阅读 1
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
</body>
</html>

<script>
	function person(name){
		this.name  = name;
	}	

	person.prototype.getname = function(){
		return this.name;
	}

	var objectFactory = function(){
		var obj  = new Object();
		console.log(obj.__proto__);
		_construct = [].shift.call(arguments);

		//更改的是构造器的原型.  默认的是 function object / 更改后的指定的.	
		obj.__proto__ = _construct.prototype;
		var ret  = _construct.call(obj,arguments);

		return typeof ret  === 'object' ? ret  : obj;

	}

	var newObj  = objectFactory(person,"zhan");
	console.log(newObj.__proto__);
	//console.log(newObj.getname());
	// console.log(newObj);

	var a={name:'zhagn'};
	console.log(a);
	// 如果是这样的调整,那么a就变成一个函数对象,
	//a.__proto__  = person.__proto__;   // 这样赋值是错误的.
	// a.__proto__ = person.constructor;  // 这样赋值也是错误的,
	// 后改变原型对原始对象会有影响,不存在先后的问题.
	a.__proto__  = person.prototype;
	console.log(a);
	//console.log(a.getname());
	// new a;  //  a is not a constructor ,如果用new的方式, 必须有constructor属性,
	// a();    //  a is not a function, 也不可以调用, 
	// a.toString();  //Function.prototype.toString is not generic  
	//  a.name;   // 这个是可以正常使用的,
	/*
	*  关键的区别 :   __proto__ : 是一个函数,
	*                 construct : 是一个函数,
	*				  prototype : 是一个对象. 创建对象,主要依赖于此.	
	*				  字面量对象不可以 new 的关键原因是  该对象不具有constructor属性.	
	**/
	// 通过__proto__原型构造对象.
	//console.log(new a.__proto__.constructor('aaa'));
	var ar = new Array();
	var ob = new Object();
	console.log(ar.__proto__);   // 该__proto__中包括不同的方法.
	console.log(ob.__proto__);   // 

	console.log(ar.__proto__ != ob.__proto__,  ar.prototype == ob.prototype);

	console.log(a.prototype == newObj.prototype );
	console.log(a.__proto__ == newObj.__proto__);

</script>

 

共有 人打赏支持
粉丝 7
博文 51
码字总数 30094
×
小张525
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: