首頁 > web前端 > js教程 > 主體

如何在沒有 new 關鍵字的情況下呼叫 ES6 類別?

Susan Sarandon
發布: 2024-10-26 03:18:02
原創
461 人瀏覽過

 How to Invoke ES6 Classes Without the `new` Keyword?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!