ES6:繞過類別建構子呼叫的new 關鍵字
在ES6 中,類別不僅充當物件的藍圖,也體現了它們的構造函數。 constructor()函數作為類體,在類別被呼叫時觸發其執行。但是,嘗試在沒有必需的 new 關鍵字的情況下呼叫類別通常會導致「無法將類別作為函數呼叫」錯誤訊息。
了解建構子指令
類別本質上與 new 運算子相關聯,這可確保在實例化時建立類別的新實例。呼叫不帶 new 的類別違反了此設計原則,導致上述錯誤。
替代解決方案
如果所需的行為是允許帶或不帶new 的類調用,存在幾種替代方案:
1。使用常規函數代替類別
常規函數可以模仿類似類別的行為,而無需新的要求。它仍然可以使用它來強制執行類似實例的行為,但它缺乏類別的封裝和繼承功能。
<code class="js">function Foo(x) { this.x = x; this.hello = function() { return this.x; }; }</code>
2.強制使用 new 關鍵字
如果預期目的是始終使用 new 呼叫類,則無需任何解決方法。只要遵循建議的建構子呼叫模式:
<code class="js">(new Foo("world")).hello(); // "hello world"</code>
3.用常規函數包裝類別
這種方法提供了使用或不使用new 來呼叫類別的彈性,同時保留了使用類別的好處。包裝函數始終使用 new 呼叫類別建構子。
<code class="js">class Foo { constructor(x) { this.x = x; } hello() { return `hello ${this.x}`; } } var _old = Foo; Foo = function(...args) { return new _old(...args) }; Foo("world").hello(); // "hello world" (new Foo("world")).hello(); // Also works</code>
以上是如何在沒有 new 關鍵字的情況下呼叫 ES6 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!