【发布时间】:2016-07-26 09:47:21
【问题描述】:
我将一个对象包装在 Proxy 中,然后遍历它。如何控制它迭代的键?
如果我不覆盖密钥,代理就可以工作:
var obj = {"hello": "world"}
var proxy = new Proxy(obj, {})
for (var key in proxy){
console.log(key)
}
// logs "Hello"
但是,如果我更改 ownKeys 处理程序中的键,则不会记录任何内容。
var obj = {"hello": "world"}
var proxy = new Proxy(obj, {
ownKeys: function(){
return ["a", "b"]
}
})
for (var key in proxy){
console.log(key)
}
// Logs nothing
如果我将"hello" 作为ownKeys 的一部分返回,则仅记录"hello"。
显然 ES6 中有一个 enumerate 陷阱,但它已从 ES7 中删除。
是否仍然可以使用代理控制for...in 循环?为什么从规范中删除了enumerate?
【问题讨论】:
-
你还需要实现 getOwnPropertyDescriptor 代理陷阱,将它们设置为可枚举!