我試圖讓一個構造函數,並在其中,我不得不/想把它放到一個數組:使用Javascript - 複製數組(按價值計算)爲原型
function Animal(s) {
this.myarr.push(s)
this.bark = function() {
console.log(this.myarr)
}
}
Animal.prototype = {
myarr: []
}
var a = new Animal('a');
a.bark()
var b = new Animal('b');
b.bark()
的問題是,該陣列將被傳遞引用。其結果將是:
["a"]
["a", "b"]
我又試圖院長愛德華茲的基類:
var Animal = Base.extend({
constructor: function(s) {
this.some.push(s)
},
some: [],
bark: function() {
console.log(this.some)
}
});
var a = new Animal('a');
a.bark()
var b = new Animal('b');
b.bark()
的結果是一樣的。
["a"]
["a", "b"]
我不知道這是否是陣列的方法應該是在一個javascript「類」系統處理......雖然我可以重新初始化屬性我每次調用構造時間爲[]。
那麼,有沒有人知道如何處理這個?我應該重新初始化屬性(如果它是一個數組)? 謝謝先進。
編輯:
這裏的問題是,每當調用構造函數(this.myarr.push(S)爲例)myArr,該會指向同一個陣列 - 這就是爲什麼一個新的實例後,陣列將增長在尺寸方面。
所以:
var a = new Animal('a')
var b = new Animal('ab')
var c = new Animal('abc')
var d = new Animal('abcd')
將導致到:
["a", "ab", "abc", "abcd"]
我想要的(沒有定義構造函數中的myArr,該)myArr,該有一個默認值,每次我調用構造函數(通過新的動物( ())應該是[]。
我已經試過了,但問題是,當你想擴展它們的構造 - 你將不能訪問this.myarr如果它沒有在原型中定義。無論如何,謝謝。 – fk2blow 2011-06-13 21:18:34
我已經衝着迴應 - 你說得對。這是一個很好的解決方法。但是,再一次,如果Animal將被擴展,我不認爲它會被複制。 – fk2blow 2011-06-13 21:21:35
我不確定我明白你的意思。從我提供的代碼中,嘗試擴展:'Animal.prototype.barksLoud = function(){return this.myarr [0] +'WHOOFF !! 「; }'。工作正常,並且'this.myarr'在該Animal.prototype擴展方法中可用 – KooiInc 2011-06-13 21:23:35