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
,但事实并非如此。
为什么知道原因呢?请写更多细节。
哪本书与内容相关?
最佳答案
当您尝试访问对象上不存在的属性时,Javascript将遍历原型(prototype)链以查找该属性。但是:
p.aa = 200
这会将属性aa
直接分配给对象。该对象现在作为属性 .aa
,并且它仍然具有 .__proto__.aa
作为两个独立属性。您并没有通过分配给 .aa
来间接修改原型(prototype)。
关于javascript - 为什么下面的代码 `p.__proto__.aa`不等于200?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333148/