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
,但事实并非如此。
为什么知道原因?请写下更多细节 哪本书与内容相关?
答案 0 :(得分:2)
当您尝试访问对象上不存在的属性时,Javascript将遍历原型链以查找属性。但是:
p.aa = 200
这会直接将属性aa
分配给对象。该对象现在作为属性.aa
,并且它仍然具有.__proto__.aa
作为两个独立属性。您不是通过分配.aa
来间接修改原型。
答案 1 :(得分:0)
p.__proto__.home
尚未更改。它引用的数组已被更改。