如何解决Javascript-嵌套对象上的代理触发GET而不是SET
大家早上好
我是一名热心的ES6业余爱好者,最近我第一次接触了“代理对象”主题。 从到目前为止的网上资料中,我的理解是,代理在通用对象上充当包装器,该代理拦截其上的操作以更改其行为。 考虑到这一点,我尝试运行以下代码段,结果令人惊讶(至少对我而言):
"use strict";
let user = {
id: {
name: "Johnny",surname: "Potts",},age: 44,};
let userProxy = new Proxy(user,{
get(target,key,receiver) {
alert("GET triggered");
return Reflect.get(...arguments);
},set(target,value,receiver) {
alert("SET triggered");
return Reflect.set(...arguments);
},});
userProxy.id.name = "Pete"; //change an existing property in the nested object.
userProxy.id.gender = "male"; //introduce a new property in the nested object.
通过运行此代码,您会很容易注意到,每次都会触发“ GET”陷阱而不是“ SET”,并且不会在“ user”对象中写入新属性,但是现有对象会被更新。 / p>
谁能解释我为什么? 预先感谢您的时间和支持。
解决方法
答案是 PROXY 只替换了“直接”对象。 链接到代理对象的任何其他对象(例如本例中的嵌套对象)都不会被捕获。 这也解释了为什么总是调用“GET”;嵌套对象需要首先从父对象中检索......“初级,我亲爱的华生!”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。