Proxy代理器
用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。
简单的例子,对获取某属性的处理
let apple = { color: 'red', price: 8.6 } let proxy = new Proxy(apple, { get (target, key) { if (key === 'price') { return target[key] + 2.2 } else { return target[key] } } }) console.log(proxy.price) 10.8
如果想对某个数据进行保护,即不允许修改,也可以使用代理器
let apple = { color: 'red', price: 8.6 } let proxy = new Proxy(apple, { set (target, key, value) { return false } }) proxy.color = 'green' console.log(proxy.color) red
创建一个可撤销的代理器
let apple = { color: 'red', price: 8.6 } let proxy = Proxy.revocable(apple, { set (target, key, value) { return false } }) proxy.proxy.color = 'green' // 通过可撤销实例的proxy属性得到代理器 window.console.log(proxy.proxy.color) proxy.revoke() // 撤销代理 window.console.log(proxy.proxy.color) red TypeError: illegal operation attempted on a revoked proxy