在 ES6 中,類別是建構子的語法糖。當不使用 new 關鍵字呼叫類別時,它不會建立該類別的新實例。相反,它直接呼叫類別的建構函數。
考慮以下類別:
<code class="javascript">class Foo { constructor(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; } hello() { return `hello ${this.x}`; } }</code>
如果我們嘗試在不使用new 關鍵字的情況下呼叫此類,則會收到錯誤:
Cannot call a class as a function
這是因為類別構造函數旨在創建類別的新實例。不使用 new 運算子呼叫它們相當於呼叫常規函數。
為了允許在不使用new 關鍵字的情況下呼叫類別建構函數,我們可以使用建構子和箭頭函數的組合,如下:
<code class="javascript">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);</code>
現在,我們可以使用FooWithoutNew 來呼叫不含new 關鍵字的類別建構子:
FooWithoutNew("world").hello(); // "hello world"
但是,需要注意的是,這種方法有一些缺點。首先,它需要創建一個單獨的函數,這可能很不方便。其次,它破壞了建構函式傳回新實例的行為。
一般情況下,為了清晰和一致性,建議始終使用 new 關鍵字呼叫類別建構子。
以上是如何在沒有「new」關鍵字的情況下呼叫 ES6 類別建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!