原型和实例的顺序问题,蛮有意思大家进来看

function Person(){
   
 }

 var xiaoming = new Person();

 Person.prototype = {
   name:'小明',
   age:18,
   heigth:180
 };


 console.log(xiaoming.name);

 
</script>

为什么采用person字面量形式创建的原型对象,先实例对象会造成undefined

 function Person(){
   
 }

 var xiaoming = new Person();

 Person.prototype.name =  '小明'


 console.log(xiaoming.name);

 

 

</script>

而这种不会undefined

阅读 2.4k
2 个回答

第一种方法 Person.prototype 变成了完全不同的另一个对象,新对象与原来的对象没有任何关系。之前 new 出来的使用的原来的对象,所以没有影响。

在 Person.prototype = {....} 之后,person.prototype === xiaoming.__proto__ 是 false 。两者已经无关了,因为 Person.prototype 变成了另一个对象。

第二种方法,Person.prototype 对象还是那个对象,但是这个对象的内容发生了变化。所以 xiaoming.name 找到了变化了的 name 。

Person.prototype.name = "小明" , Person.prototype === xiaoming.__proto__ 依然是 true 。所以 xiaoming.name 依然可以找到 改变之后的 name 。

继承与原型链
开篇第一个列子

不要在 f 函数的原型上直接定义 f.prototype = {b:3,c:4};这样会直接打破原型链
推荐问题