为什么以下代码,`p .__ proto __。aa`不等于200?

时间:2016-07-12 15:28:19

标签: javascript prototype

function Person(name,age){
    this.name = name
    this.age = age;
}
Person.prototype.home = [1,2,3];
Person.prototype.aa =100;
var p = new Person('joy','7');


console.log(p.__proto__.home); //[1,2,3]
console.log(p.__proto__.aa); // 100

p.aa = 200; 
p.home[0] = 200; 

console.log(p.__proto__.home); //[200,2,3]
console.log(p.__proto__.aa); // 100 

为什么p.__proto__.home已更改。在我看来,p.aa = 200;已更改p.__proto__.aa,但事实并非如此。

为什么知道原因?请写下更多细节 哪本书与内容相关?

2 个答案:

答案 0 :(得分:2)

当您尝试访问对象上不存在的属性时,Javascript将遍历原型链以查找属性。但是:

p.aa = 200

这会直接将属性aa分配给对象。该对象现在作为属性.aa,并且它仍然具有.__proto__.aa 作为两个独立属性。您不是通过分配.aa来间接修改原型。

答案 1 :(得分:0)

p.__proto__.home尚未更改。它引用的数组已被更改。