我想弄清楚如何使用任意數量的參數(從某些其他函數調用傳遞參數)調用構造函數。如何將任意參數傳遞給javascript構造函數
我在JavaScript中有一組基和派生對象。其中一個基礎對象的方法稱爲makeNew()
,它的工作是創建一個與它所調用的對象類型相同的新對象,並處理與新對象上的普通構造函數相同的所有參數。此makeNew()
方法的要點在於,還有其他方法需要創建與當前對象相同類型的新對象,但他們不知道是什麼類型,因爲它可能是從基類繼承的類型。請注意,我不想整個克隆當前對象,而是需要一個相同類型的新對象,但使用不同的初始參數初始化爲構造函數。
的makeNew()
簡單的版本是這樣的:
set.prototype.makeNew = function() {
return new this.constructor();
}
這適用於創建同一類型,則當前的空對象,因爲如果它是一個繼承的對象類型,然後this.constructor
將是繼承的構造和它會做出正確的對象類型。
但是,當我想傳遞任意參數給構造函數,所以正常的構造函數參數可以傳遞給makeNew()
,我無法弄清楚如何做到這一點。我嘗試這樣做:
set.prototype.makeNew = function() {
return new this.constructor.apply(this, arguments);
}
但是,該代碼給了我這個錯誤在Chrome:
Error: function apply() { [native code] } is not a constructor
不知道如何對任意參數傳遞給構造函數?
我不明白是什麼第一個版本的問題。 '返回新this.constructor(參數);'應該工作。 – TastySpaceApple
@TastySpaceApple - 將單個參數傳遞給構造函數,該構造函數是一個類似數組的對象,而不是構造函數期望其多個參數如何傳遞。 – jfriend00
@cookiemonster - 我將不得不在你引用的帖子中試用這種技術。這是一個有趣的黑客。 – jfriend00