我有一個奇怪的行爲,同時使用jQuery.extend擴展對象的原型。Javascript,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);
}
});
當我創建該對象的「c」中,收集得到的「insertInCollection」函數內部填充然後我執行此示例代碼
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
,和警告返回長度爲2. 但是,當我實例化對象「d」(執行新的TestClass(arr2))時,「insertInCollection」函數內的警報被觸發,警報顯示4!
在實踐中,我無法得到背景中發生的事情。看起來像第一個集合的元素永遠不會被刪除 - 當第二個對象(「d」)被創建時,它已經在「collection」屬性中存在對象「c」的2個元素。
這也發生在不使用jQuery.extend的情況下,使用普通的.prototype方法。
任何人都可以幫助我嗎?
預先感謝您!
什麼是「TestClass」?現在你正在附加到`SampleClass.prototype.array`而不是實例的單個屬性。 – 2011-02-16 10:37:30
對不起,它是SampleClass而不是TestClass,現在我編輯了。雖然我有點兒得到了你的意見 - 這是我經過幾次嘗試之後的猜測。如果你想詳細說明,我很樂意接受答案。 – sh0uzama 2011-02-16 10:56:08