Rhino や SpiderMonkey などの特定の JavaScript 実装の noSuchMethod 機能、未実装のメソッドを処理できるようになります。ただし、同様の機能はプロパティではネイティブに使用できません。
ECMAScript 6 では、プロパティ アクセスなどの基本的な操作をカスタマイズするメカニズムを提供するプロキシが導入されました。プロキシ トラップを活用することで、__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>
次の例を考えてみましょう。
<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 サイトの他の関連記事を参照してください。