ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript でプロパティレベルの noSuchMethod をエミュレートする方法

JavaScript でプロパティレベルの noSuchMethod をエミュレートする方法

DDD
DDDオリジナル
2024-10-18 14:29:03636ブラウズ

How to Emulate Property-Level noSuchMethod in JavaScript?

JavaScript でのプロパティ レベルの noSuchMethod のエミュレート

Rhino や SpiderMonkey などの特定の JavaScript 実装の noSuchMethod 機能、未実装のメソッドを処理できるようになります。ただし、同様の機能はプロパティではネイティブに使用できません。

ECMAScript 6 Proxies to the Rescue

ECMAScript 6 では、プロパティ アクセスなどの基本的な操作をカスタマイズするメカニズムを提供するプロキシが導入されました。プロキシ トラップを活用することで、__noSuchMethod__ を使用してプロパティ ルックアップの望ましい動作をエミュレートできます。

ES6 プロキシを使用したソリューション

<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>

使用例

次の例を考えてみましょう。

<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);
instance.test();
instance.someName(1, 2);
instance.xyz(3, 4);
instance.doesNotExist("a", "b");</code>

このコードは、プロパティの noSuchMethod エミュレーションを示す次の出力をログに記録します:

value1
Test called
No such method someName called with 1,2
No such method xyz called with 3,4
No such method doesNotExist called with a,b

以上がJavaScript でプロパティレベルの noSuchMethod をエミュレートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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