首頁 web前端 js教程 JavaScript 的 new 運算子可以與 .apply() 方法一起使用嗎?

JavaScript 的 new 運算子可以與 .apply() 方法一起使用嗎?

Dec 17, 2024 am 09:31 AM

Can JavaScript's `new` Operator Work with the `.apply()` Method?

.apply() 方法可以與 new 運算子一起使用嗎?

在 JavaScript 中,通常使用 new 運算子建立物件實例涉及明確地將參數傳遞給建構函式。但是,可能需要傳遞可變數量的參數。本問題探討了結合使用 .apply() 方法和 new 運算子來實現這種靈活性的可能性。

挑戰

最初,人們可能會嘗試以下程式碼:

function Something() {
    // init stuff
}
function createSomething() {
    return new Something.apply(null, arguments);
}
var s = createSomething(a, b, c); // 's' is an instance of Something
登入後複製

但是,這種方法不起作用,因為new 運算符與.apply()不相容

解決方案

已經提出了各種解決方案來克服此限制:

1. Matthew Crumley的方法

此解法採用從目標建構子繼承的中間函數:

var createSomething = (function() {
    function F(args) {
        return Something.apply(this, args);
    }
    F.prototype = Something.prototype;

    return function() {
        return new F(arguments);
    }
})();
登入後複製

2。 Function.prototype.bind

ECMAScript5 引入了 Function.prototype.bind 方法,該方法允許部分應用函數:

function newCall(Cls) {
    return new (Function.prototype.bind.apply(Cls, arguments));
}
登入後複製

可以如下使用:

var s = newCall(Something, a, b, c);
登入後複製

使用優點Function.prototype.bind

這個方法有幾個優點:

  • 它適用於所有構造函數,包括像Date 這樣的特殊建構子。
  • 它可以是使用簡潔,直接將參數傳遞給new。
  • 它保留了原始建構子的prototype.

說明

Function.prototype.bind 建立一個繼承函數的新原始屬性函數。透過部分應用具有所需參數的建構函數,我們可以使用 new 關鍵字建立一個實例。

以上是JavaScript 的 new 運算子可以與 .apply() 方法一起使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在JavaScript中替換字符串字符 在JavaScript中替換字符串字符 Mar 11, 2025 am 12:07 AM

在JavaScript中替換字符串字符

自定義Google搜索API設置教程 自定義Google搜索API設置教程 Mar 04, 2025 am 01:06 AM

自定義Google搜索API設置教程

示例顏色json文件 示例顏色json文件 Mar 03, 2025 am 12:35 AM

示例顏色json文件

8令人驚嘆的jQuery頁面佈局插件 8令人驚嘆的jQuery頁面佈局插件 Mar 06, 2025 am 12:48 AM

8令人驚嘆的jQuery頁面佈局插件

10個jQuery語法熒光筆 10個jQuery語法熒光筆 Mar 02, 2025 am 12:32 AM

10個jQuery語法熒光筆

什麼是這個'在JavaScript? 什麼是這個'在JavaScript? Mar 04, 2025 am 01:15 AM

什麼是這個'在JavaScript?

構建您自己的Ajax Web應用程序 構建您自己的Ajax Web應用程序 Mar 09, 2025 am 12:11 AM

構建您自己的Ajax Web應用程序

10 JavaScript和JQuery MVC教程 10 JavaScript和JQuery MVC教程 Mar 02, 2025 am 01:16 AM

10 JavaScript和JQuery MVC教程

See all articles