У меня странное поведение при расширении прототипа объекта с использованием jQuery.extend.
Предполагая, что этот пример класса:
var SampleClass = function (anArray) { this.Init(anArray); };
$.extend(SampleClass.prototype, {
array: null,
collection: new Array(),
Init: function (arr) {
var c = this;
c.array = arr;
c.insertInCollection();
},
insertInCollection: function () {
var c = this;
var l = c.array.length;
for (var i = 0; i < l; i++) {
var bar = {};
c.collection.push(bar);
}
alert(c.collection.length);
}
});
Затем я выполняю этот пример кода
var arr1 = [{ name: 'foo', value: 20 }, { name: 'baz', value: 20}];
var arr2 = [{ name: 'bar', value: 60 }, { name: 'gaz', value: 40}];
c = new SampleClass(arr1);
d = new SampleClass(arr2); //<-- HERE LIES THE PROBLEM
Когда я создаю объект "c", коллекция заполняется внутри функции "insertInCollection", а предупреждение возвращает длину 2.
Однако когда я создаю экземпляр объекта «d» (выполняю новый TestClass (arr2)), срабатывает предупреждение внутри функции «insertInCollection», и предупреждение показывает 4!
На практике я не могу понять, что происходит в фоновом режиме. Похоже, что элементы первой коллекции никогда не удаляются - когда создается второй объект ("d"), в нем уже есть 2 элемента объекта "c", существующих внутри свойства "collection".
Это также происходит без использования jQuery.extend, с использованием простого подхода .prototype.
Кто-нибудь может мне помочь с этим?
Заранее спасибо!