У меня есть проблема, которую я не могу решить, потому что я не могу объяснить это поведение:объекта недвижимости в прототипе
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
Может ли кто-нибудь объяснить мне это? Благодаря ...
EDIT:
Вот решение:
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);
Вы мутируете общий объект (Mutating, когда вы повторно назначить подсвойство или вызвать функцию, которая изменяет объект). prop является общим, потому что он находится на прототипе, и вы его не назначаете (prop = newValue), если вы его назначили, то prop будет затенен экземпляром (a и b). Подробнее о функциях прототипа и конструктора здесь: http://stackoverflow.com/a/16063711/1641941 – HMR