浅谈给原型重新赋值问题
也许,你曾碰到过这样一个问题:我原型里面有某个属性,但是为什么是undefined呢?
例如以下代码:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。function Person(){} var man = new Person(); Person.prototype={ name: "Tom", age: 18, saySomething: function(){ alert("hello!"); } }; console.log(man.name); //undefined  
看到这里,是不是有点困惑了?
其实要理解这个,需要明白以下三点:
- Person的prototype属性是何时产生的?
- 实例对象man与prototype是什么关系?
- 对象的引用
下面来逐个回答下:
- 创建构造函数的时候,会自动生成prototype属性,指向一个对象
 也就是说function Person(){}执行完毕的时候,就已经存在prototype属性了,且指向一个对象
-  new实例对象的时候,会生成__proto__属性,指向构造函数的原型代码在执行console.log(man.name)的时候,会先查找man对象上是否有name属性,若是没有找到该属性,会通过__proto__属性查找构造函数Person的原型
-  function Person(){} var man = new Person();
 代码执行到此,构造函数Person的prototype属性指向的对象和实例对象man的__proto__指向的对象都是  接着执行代码: Person.prototype={ name: "Tom", age: 18, saySomething: function(){ alert("hello!"); } };Person.prototype指向了另一个对象,即下图所示:   但是实例对象man的__proto__指向没有改变,即下图所示。所以man的原型链上没有name属性,所以undefined.  
 
                    更多精彩
		 
													 
													 
													 
													 
	 
		

