ES6 クラスを使用して関数を拡張し、インスタンス データにアクセスするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-21 06:09:30
オリジナル
130 人が閲覧しました

How can ES6 Classes be Used to Extend Functions and Access Instance Data?

ES6 クラスによる関数の拡張

ES6 では、特別なオブジェクトを拡張して、Function オブジェクトからの継承を許可できます。このようなオブジェクトを関数として呼び出すことは可能ですが、この呼び出しのロジックを実装するのは困難な場合があります。

インスタンス データを関数呼び出しに渡す

クラスを関数として呼び出す場合、これはウィンドウオブジェクトを指します。インスタンス データにアクセスするには、次の 2 つの方法が利用可能です:

  1. ハードコーディング: インスタンス データを含むコード文字列を期待するようにスーパー呼び出しを強制します。
class Smth extends Function {
  constructor(x) {
    super("return " + JSON.stringify(x) + ";");
  }
}
ログイン後にコピー
  1. クロージャの使用: インスタンス変数にアクセスするクロージャ関数を返します。
class Smth extends Function {
  constructor(x) {
    function smth() { return x; };
    Object.setPrototypeOf(smth, Smth.prototype);
    return smth;
  }
}
ログイン後にコピー

関数拡張の抽象化

より一般化されたアプローチは、拡張機能を処理する ExtensibleFunction クラスを作成することです:

class ExtensibleFunction extends Function {
  constructor(f) {
    return Object.setPrototypeOf(f, new.target.prototype);
  }
}
ログイン後にコピー

このクラスは、特定のクラスを拡張するために使用できます:

class Smth extends ExtensibleFunction {
  constructor(x) {
    super(() => { return x; }); // closure
  }
}
ログイン後にコピー

要約すると、次のようになります。 ES6 クラスを使用して Function を拡張すると、呼び出しロジックをカスタマイズしながら関数の動作を継承できます。拡張関数を呼び出すときに、さまざまなアプローチを使用してインスタンス データへのアクセスを提供できます。

以上がES6 クラスを使用して関数を拡張し、インスタンス データにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!