元编程
代理人
术语
处理程序和陷阱
可撤销 代理
const revocable=代理可撤销( {}, { get(目标,名称){ 返回`[[${name}]]`; }, }, ); const proxy=可撤销代理; console.log(proxy.foo);// “[[foo]]” revotable.revoke(); console.log(proxy.foo);// TypeError:无法对已吊销的代理执行“get” proxy.foo=1;// TypeError:无法对已吊销的代理执行“set” 删除proxy.foo;// TypeError:无法对已吊销的代理执行“deleteProperty” console.log(代理类型);// “object”,typeof不会触发任何陷阱
反思
更好的apply()函数
函数.prototype.apply.call(Math.floor,未定义,[1.75]);
反射应用(数学地板,未定义,[1.75]); // 1 反射应用(字符串.fromCharCode,未定义,[104101108111]); //“你好” 反射应用(RegExp.prototype.exec,/ab/,[“confabulation”]).index; // 4 Reflect.apply(“”.charAt,“小马”,[3]); //“i”