【发布时间】:2017-08-31 06:21:47
【问题描述】:
如何处理嵌套对象中 ownKeys 的所有陷阱?
我只知道如何处理一层深的对象:
function wrap(obj, fn) {
var handler = {
ownKeys(target) {
fn(target)
return target
}
}
return new Proxy(obj, handler)
}
var origObj = {
a: {
b: {
c: 0
}
}
}
var wrappedObj = wrap(origObj, console.log)
Object.keys(wrappedObj) // => actual = expected: { a: { b: { c: 0 } } }
Object.keys(wrappedObj.a) // => actual: not working, expected: { b: { c: 0 } }
Object.keys(wrappedObj.a.b) // => actual: not working, expected: { c: 0 }
编辑 1:
如果我尝试包装每个内部对象(来自这个answer),那么它会记录所有步骤,而不仅仅是最后一个。 “所有步骤”是指代理的内部进程,它遍历整个嵌套对象,因此它会多次触发 fn(target),但我只想触发一次。
编辑 2:
所以看起来问题出在proxy 看起来损坏的节点环境(节点版本 8.1.4)上。在 chrome 控制台中一切正常。
【问题讨论】:
-
只有
origObj被代理,内部对象没有。 -
是的,我知道这就是为什么我问如何为嵌套对象做到这一点(对不起我的英语)。
-
如果不想递归创建代理,需要遍历代理内部的
target。
标签: javascript object proxy ecmascript-6