Столкнулся с такой неприятной особенностью прототипного наследования. Если у объекта-родителя имеется мутабельная переменная (в данном случае v1), то она «расшаривается» между всеми детьми.
В примере ниже изменяем переменную v1 у объекта foo. В результате чего меняется значение v1 у объекта bar.
Как сделать, чтобы у каждого объекта были свои переменные?
function O1(){
this.v1 = [];
}
O2.prototype = new O1();
O2.prototype.constructor = O2;
function O2(){
this.v2 = [];
}
var foo = new O2();
var bar = new O2();
foo.v1.push("CHANGE");
foo.v2.push("CHANGE");
console.dir(bar.v1); // ["CHANGE"]
console.dir(bar.v2); // []