扫码关注官方订阅号
我怎么感觉是 触发了 get 事件,并且打出的是 get 调用后的返回值 undefined;我该如何打出 变化后的值?
defineProperty设置set的时候不是extend,而是覆盖的。你的这个写法没有get方法,也没有在set中设置值,虽然会显示属性改变,但是实际上却没有这个值。此外,i的值会被绑定到循环的最后,需要吧var改成let, 否则无论你改什么,都会变成改最后一个属性。大约是改成这样:
function observe(obj) { var tmp = {} for (let i in obj) { if (Object.prototype.toString.call(obj[i]) == "[object Object]") { observe(obj[i]); } tmp[i] = obj[i]; Object.defineProperty(obj, i, { get: function () { return tmp[i]; }, set: function (val) { console.log(i, "属性已经改变 :", tmp[i], "--->", val); tmp[i] = val; }, }); } }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
defineProperty设置set的时候不是extend,而是覆盖的。
你的这个写法没有get方法,也没有在set中设置值,虽然会显示属性改变,但是实际上却没有这个值。
此外,i的值会被绑定到循环的最后,需要吧var改成let, 否则无论你改什么,都会变成改最后一个属性。
大约是改成这样: