「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ES6 クラスを使用して関数を拡張し、インスタンス データにアクセスするにはどうすればよいですか?

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

2024 年 11 月 12 日に公開
ブラウズ:247

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 を拡張すると、呼び出しロジックをカスタマイズしながら関数の動作を継承できます。拡張関数を呼び出すときに、さまざまなアプローチを使用してインスタンス データへのアクセスを提供できます。

リリースステートメント この記事は次の場所に転載されています: 1729462035 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3