首頁 > web前端 > js教程 > 您可以在 JavaScript 中使用「new」運算子和「.apply()」來建立帶有變數參數的物件嗎?

您可以在 JavaScript 中使用「new」運算子和「.apply()」來建立帶有變數參數的物件嗎?

Patricia Arquette
發布: 2024-12-06 21:43:15
原創
658 人瀏覽過

Can You Use the `new` Operator with `.apply()` in JavaScript to Create Objects with Variable Arguments?

使用 new 運算子呼叫 .apply() 方法:可行嗎?

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板