Все в прототипе конструктора используется совместно со ВСЕМИ экземплярами.Для функций это круто.Очень эффективно использовать одни и те же функции для нескольких объектов.Но для данных это менее круто, потому что у объектов больше нет свежей копии для каждого.
Это особенно запутанно, потому что в прототипе вы помещаете методы «экземпляра», верно?Но просто поймите, что все экземпляры имеют одни и те же функциональные объекты, и функции просто вызываются с другим «this».
Решите это, инициализируя свойства уровня экземпляра в конструкторе.
var Foo = function() {
this.someProperty = someValue;
};
Проверьте этот фрагмент, который демонстрирует разницу.
var Foo = function() {
this.instanceArray = [];
};
Foo.prototype.sharedArray = [];
var a = new Foo();
a.bar = function() {
this.instanceArray.push('a');
this.sharedArray.push('a');
};
a.bar();
var b = new Foo();
b.bar = function() {
console.log(this.instanceArray[0]); // undefined
console.log(this.sharedArray[0]); // "a"
};
b.bar();
http://jsfiddle.net/nf3Jm/3/