标签:set console log prop Reflect 响应 vue3.0 proxy 原理
// 是通过proxy把目标对象变成代理对象,然后通过Reflect把值返回回来的操作,将数据变成响应式
// 常用的Reflect方法有 get、set、deleteProperty
const user = {
name: '佐助',
age: 20,
like: {
name: '小樱',
age: 19
}
}
// 两个参数
// 参数1:目标对象,参数2:处理器对象,是不可构造的
const proxy = new Proxy(user, {
// 访问时触发
get(target, prop) {
console.log("get方法被触发");
return Reflect.get(target, prop)
},
// 修改值或者添加值时触发
set(target, prop, val) {
console.log("set方法被触发");
return Reflect.set(target, prop, val)
},
// 删除对象上面的某个属性(深度的)
deleteProperty(target, prop) {
console.log("deleteProperty方法被触发");
return Reflect.deleteProperty(target, prop)
}
})
// 触发get方法 为undefined,要通过 Reflect把值反射回来
console.log(proxy.name);
// 触发set方法 并没有修改值要通过 Reflect把值反射回来(通过代理对象更新目标对象的某个属性值)
proxy.name = '鸣人'
console.log(proxy);
// 向目标对象中添加一个属性(也是触发set方法)
proxy.sex = "男"
console.log(proxy);
// 删除对象上面的属性
delete proxy.sex
delete proxy.like.age // 深度的,删除like.age也是可以删除的
console.log(proxy);
标签:set,console,log,prop,Reflect,响应,vue3.0,proxy,原理 来源: https://www.cnblogs.com/demoTimes/p/15908251.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。