javascript - 如何将对象包装在代理中以进行调试?
问题描述
我正在尝试包装一个对象以识别谁在更改它。我试图用Proxy
对象做到这一点,但我得到了一个奇怪的错误:
const wrap = object => {
const handler = {
get(obj, prop) {
return wrap(obj[prop])
},
set(obj, prop, value) {
debugger;
return Reflect.set(obj, prop, value)
}
};
return new Proxy(object, handler)
}
我运行obj = wrap(obj)
,然后启动我的函数,但随后引发错误:
TypeError: Cannot create proxy with a non-object as target or handler
我究竟做错了什么?
解决方案
如果 的属性obj
不是对象,则递归包装将不起作用。检查 obj 是否为对象:
const wrap = object => {
const handler = {
get(obj, prop) {
return wrap(obj[prop])
},
set(obj, prop, value) {
debugger;
return Reflect.set(obj, prop, value)
}
};
return _.isObject(object) ? new Proxy(object, handler) : object
}
推荐阅读
- javascript - 如何强制 addEventListener 提交只运行一次
- html - 无法通过 div 获取隐藏菜单
- c++ - 如何将 libtorch 库添加到 CLION?
- spring-boot - 无法测试我的@RestController:嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:
- javascript - 如何演示 document.documentElement.clientWidth 和 innerWidth 之间的区别?
- r - 按名称读入 csv 列的子集
- google-sheets - 使用查询过滤数据的下拉列表
- python - 如何使用来自多个自变量的多个 Z 分数开发 0-100 综合分数或指数分数?
- r - 空间投影问题 - 未知数据 GRS1980
- r - 将布尔输出添加到 R 中的函数