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 を拡張すると、呼び出しロジックをカスタマイズしながら関数の動作を継承できます。拡張関数を呼び出すときに、さまざまなアプローチを使用してインスタンス データへのアクセスを提供できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3