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 サイトの他の関連記事を参照してください。