ホームページ > ウェブフロントエンド > jsチュートリアル > 「new」キーワードを使用せずに ES6 クラスを呼び出すにはどうすればよいですか?

「new」キーワードを使用せずに ES6 クラスを呼び出すにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-26 03:18:02
オリジナル
535 人が閲覧しました

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

ES6: クラス コンストラクター呼び出しの新しいキーワードをバイパスする

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.

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート