在 JavaScript 中,可能需要使用 new 運算子建立物件實例同時向建構函式傳遞可變數量的參數。但是,使用您提供的程式碼片段無法實現此目的。
1. Matthew Crumley 的方法:
此解決方案涉及創建一個新函數F,它並擴展為Something 原型並擴展為apply() 方法提供包裝器。可以如下實現:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. ECMAScript 5 解決方案:
使用ECMAScript 5,可以使用Function.prototype.bind 方法來獲得更簡潔的解:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
可以如下使用此函數:
var s = newCall(Something, a, b, c);
甚至直接:
var s = new (Function.prototype.bind.call(Something, null, a, b, c));
解釋:
bind 方法允許我們創建一個新函數,它與原始函數具有相同的上下文(this 值),但採用有限數量的參數。透過使用 apply() 方法,我們可以將可變數量的參數傳遞給綁定函數。最後,可以將 new 運算子套用至綁定函數來建立新的物件實例。
以上是您可以在 JavaScript 中使用「new」運算子和「.apply()」來建立帶有變數參數的物件嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!