ES6 クラスによる関数の拡張
ES6 では、特別なオブジェクトを拡張して、Function オブジェクトからの継承を許可できます。このようなオブジェクトを関数として呼び出すことは可能ですが、この呼び出しのロジックを実装するのは困難な場合があります。
インスタンス データを関数呼び出しに渡す
クラスを関数として呼び出す場合、これはウィンドウオブジェクトを指します。インスタンス データにアクセスするには、次の 2 つの方法が利用可能です:
class Smth extends Function { constructor(x) { super("return " + JSON.stringify(x) + ";"); } }
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 サイトの他の関連記事を参照してください。