我实际上是要自己回答我的问题,但是我太慢了,其他人先回答了它(此外还添加了非常有用的信息)。不过,这是我想写的答案,以防它可能以某种方式帮助某人:
似乎在调用getOwnPropertyDescriptor
时会触发陷阱hasOwnProperty
。hasOwnProperty
因此,您可以通过执行以下操作进行陷阱:
getOwnPropertyDescriptor(target, name) {
return {
value : target[name],
//use a logical set of descriptors:
enumerable : true,
configurable : true,
writable : true
};
}
另一部分是陷阱get
,ownKeys
也是:
get(target, name) {
return {}; //replace this with a relevant object
}
//These will be iterated over as part of the for loop
ownKeys() {
return ["RelevantProperty1", "RelevantProperty2"];
}
总而言之,由于您必须在 trap 时返回一组属性ownKeys
,因此在此用例中使用代理似乎并没有使事情变得更好。我认为在大多数情况下,以下方法同样有效并且不那么脆弱:
let obj = {};
let keys = ["a" , "b"];
for (let key of keys) {
obj[key] = {}; //relevant object
}
所以使用代理可能是矫枉过正。