如何在代理中包装对象以进行调试?

时间:2018-09-16 13:01:08

标签: javascript ecmascript-6 proxy

我正在尝试包装一个对象,以确定谁在更改它。我尝试使用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

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

如果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
}