【发布时间】:2016-07-12 15:28:19
【问题描述】:
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,但事实并非如此。
为什么知道原因?请写更多细节。
哪本书与内容相关?
【问题讨论】:
-
p.aa !== p.prototype.aa -
p.home === p.prototype.home?
-
不是一个答案,但双下划线原型双下划线不是很不鼓励(形式明智)吗?我在一本书里读到过。
-
@cresjoy:是的。你应该改用
Object.getPrototypeOf(p).aa。 -
或者Javascript object members that are prototyped as arrays become shared by all class instances 可能是更好的复制目标。任何淘金者都可以随意修复它。
标签: javascript prototype