オブジェクトやクラスインスタンスに対して、各種のフックが出来るようになっています。
例えば
Proxyの第1引数ですが、
「関数としての呼び出し」と、「プロパティの取得・設定」の両方を許すためには、第1引数に関数を渡しておく必要があります。
「プロパティの取得・設定」だけで良いのであれば、オブジェクトを渡せば大丈夫です。
var hook_obj = new Proxy( ()=>{}, { // 関数としてhook_objを呼び出した時に反応する apply(target, that, args) { hm.debuginfo(args); }, // プロパティを取得した時に反応する get(target, prop, receiver) { hm.debuginfo(prop) return prop; }, // プロパティを設定した時に反応する set(target, prop, val, receiver) { hm.debuginfo(prop, val); return true; } } ); hm.debuginfo(hook_obj["bbb"]); hook_obj["aaa"] = 3; hook_obj(10,20,30); hm.debuginfo(hook_obj["bbb"]);
class MyClass { constructor() {} } var original_ins = new MyClass(); var hook_ins = new Proxy(original_ins, { get(target, prop, receiver) { hm.debuginfo(prop) return prop; }, set(target, prop, val, receiver) { hm.debuginfo(prop, val); return true; } }
この他にもフック出来るハンドラーがいろいろ提供されています。