」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在沒有「new」關鍵字的情況下呼叫 ES6 類別建構子?

如何在沒有「new」關鍵字的情況下呼叫 ES6 類別建構子?

發佈於2024-11-08
瀏覽:470

How Can I Call an ES6 Class Constructor Without the \

在沒有「new」的情況下呼叫 ES6 類別建構子

在 ES6 中,類別是建構子的語法糖。當不使用 new 關鍵字呼叫類別時,它不會建立該類別的新實例。相反,它直接呼叫類別的建構函數。

考慮以下類別:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

如果我們嘗試在不使用new 關鍵字的情況下呼叫此類,則會收到錯誤:

Cannot call a class as a function

這是因為類別建構子是設計好的創建該類別的新實例。不使用 new 運算子呼叫它們相當於呼叫常規函數。

為了允許在不使用 new 關鍵字的情況下呼叫類別建構函數,我們可以使用建構子和箭頭函數的組合,如下所示:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

const FooWithoutNew = () => new Foo(...arguments);

現在,我們可以使用FooWithoutNew:

FooWithoutNew("world").hello(); // "hello world"

但是,要注意的是,這種方法有一些缺點。首先,它需要創建一個單獨的函數,這可能很不方便。其次,它破壞了建構函式傳回新實例的行為。

一般情況下,為了清晰和一致性,建議始終使用 new 關鍵字呼叫類別建構子。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3