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"
ただし、このアプローチにはいくつかの欠点があることに注意することが重要です。まず、別の関数を作成する必要があるため、不便な場合があります。 2 番目に、新しいインスタンスを返すコンストラクターの動作が壊れます。
一般に、明確さと一貫性のために、常に new キーワードを使用してクラス コンストラクターを呼び出すことをお勧めします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3