ホームページ  >  記事  >  ウェブフロントエンド  >  ES6 プロキシは JavaScript のプロパティの noSuchMethod 機能をエミュレートできますか?

ES6 プロキシは JavaScript のプロパティの noSuchMethod 機能をエミュレートできますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-18 14:19:03989ブラウズ

Can ES6 Proxies Emulate the noSuchMethod Feature for Properties in JavaScript?

ES6 プロキシを使用した JavaScript のプロパティの noSuchMethod のエミュレーション

noSuchMethod 機能により、特定の JavaScript 実装で存在しないメソッドにアクセスするときのカスタム動作を実装します。 ES6 プロキシを使用するプロパティでも同様の機能を実現できます。

ES6 プロキシの使用

プロキシ オブジェクトは、プロパティ検索などの基本的な操作のカスタム動作を提供します。プロパティ アクセスにトラップを設定することで、noSuchMethod の動作をエミュレートできます:

<code class="javascript">function enableNoSuchMethod(obj) {
  return new Proxy(obj, {
    get(target, p) {
      if (p in target) {
        return target[p];
      } else if (typeof target.__noSuchMethod__ == "function") {
        return function(...args) {
          return target.__noSuchMethod__.call(target, p, args);
        };
      }
    }
  });
}</code>

Usage

例:

<code class="javascript">function Dummy() {
  this.ownProp1 = "value1";
  return enableNoSuchMethod(this);
}

Dummy.prototype.test = function() {
  console.log("Test called");
};

Dummy.prototype.__noSuchMethod__ = function(name, args) {
  console.log(`No such method ${name} called with ${args}`);
  return;
};

var instance = new Dummy();
console.log(instance.ownProp1); // value1
instance.test(); // Test called
instance.someName(1, 2); // No such method someName called with [1, 2]
instance.xyz(3, 4); // No such method xyz called with [3, 4]
instance.doesNotExist("a", "b"); // No such method doesNotExist called with ["a", "b"]</code>

この例は、プロキシがプロパティ アクセスをインターセプトし、存在しない場合は noSuchMethod 実装に委任して、明示的に定義されていないプロパティのカスタム動作を有効にすることを示しています。

以上がES6 プロキシは JavaScript のプロパティの noSuchMethod 機能をエミュレートできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。