Proxy

Proxy

Proxy 对象用于创建一个对象的代理,从而实现基本的拦截和自定义(如属性查找、赋值、枚举、函数调用等)操作。

参数

创建 Proxy 对象时,需要传入两个参数 targethandler

  1. target :指要代理的目标对象。

  2. handler:指处理器对象,用于执行监视目标对象的各种操作。

  3. 案例

     // 目标对象
     const person = {
     	name: 'Jack',
     	age: 20,
     }
     
     // handler 对象
     class handler {
     	// 获取目标对象的属性值
     	get(target, prop) {
     		return Reflect.get(target, prop)
     	};
     	// 修改目标对象的属性值/添加新的属性
     	set(target, prop, val) {
     		return Reflect.set(target, prop, val)
     	};
     	// 删除目标对象的属性
     	deleteProperty(target, prop) {
     		return Reflect.deleteProperty(target, prop)
     	}
     }
     
     // 实例化对象
     const proxy = new Proxy(person, handler)
     
     console.log(proxy.name); // Jack
     // 修改属性
     proxy.name = 'Lucy'
     console.log(proxy); // name: "Lucy", age: 20
     // 添加属性
     proxy.gender = '女'
     console.log(proxy) // name: "Lucy", age: 20, gender: "女"
     // 删除属性
     delete proxy.gender
     console.log(proxy) // name: "Lucy", age: 20
    

方法

Proxy.revocable() 方法可以用来创建一个可撤销的 **Proxy **对象。

参数:该方法同样需要传入两个参数 targethandler

返回值:该方法返回值是一个对象,其结构为:{“proxy”: proxy, “revoke”: revoke}

  1. proxy:表示新生成的 Proxy 对象本身,相当于 new Proxy(target, handler)
  2. revoke:指撤销方法,调用时无需参数,就可以撤销掉和它一起生成的 Proxy 对象,即:proxy

案例

const person = {
	name: 'jeck',
	age: 20,
}

const revocable = Proxy.revocable(person, {
	get(terget, prop) {
		return Reflect.get(terget, prop)
	}
})

console.log(revocable.proxy.name);	// jeck
revocable.revoke()
console.log(revocable.proxy.name);	// 抛出 TypeError

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值