~文法メモ~ メタメソッドメタメソッドオブジェクトやクラスインスタンスに対して、各種のフックが出来るようになっています。
Proxyの第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; } } この他にもフック出来るハンドラーがいろいろ提供されています。 |