我有我可以不解決,因爲我無法解釋這種現象的一個問題:對象屬性在原型
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