我有我可以不解决,因为我无法解释这种现象的一个问题:对象属性在原型
var A = function(value) {
this.prop = value;
};
A.prototype = {
prop: 0
};
var a = new A(1);
var b = new A(2);
console.log(a.prop);
console.log(b.prop);
输出:
1
2
但是,与此代码(几乎是相同的):
var A = function(value) {
this.prop.value = value;
};
A.prototype = {
prop: {
value: 0
}
};
var a = new A(1);
var b = new A(2);
console.log(a.prop.value);
console.log(b.prop.value);
我有这样的输出:
2
2
有人可以解释我吗? 谢谢...
编辑:
这里有一个解决方案:
var A = function(value) {
this.prop = {};
this.prop.value = value;
};
A.prototype = {
};
var a = new A(1);
var b = new A(2);
console.log(a.prop.value);
console.log(b.prop.value);
你是变异的共享对象(不同诱变是当你重新分配子属性或调用改变对象的功能)。道具是共享的,因为它在原型上,并且你不重新赋值它(prop = newValue),如果你重新赋值它,那么道具会被实例(a和b)遮蔽。更多关于原型和构造函数在这里:http://stackoverflow.com/a/16063711/1641941 – HMR