我其實要回答我的問題我自己,但我是太慢了,別人先回答了這個問題(和另外又添非常有用的信息)。不過,這裏是我想寫的答案,以防它可能會幫助別人以某種方式:
看來,當hasOwnProperty
被稱爲getOwnPropertyDescriptor
陷阱被觸發。所以,你可以捕獲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"];
}
所有的一切,因爲你必須返回屬性,當你的數組陷阱ownKeys
,在這個用例中,使用代理似乎並沒有讓事情變得更好。我認爲對於大多數情況下,以下將同樣適用,並且不易碎:
let obj = {};
let keys = ["a" , "b"];
for (let key of keys) {
obj[key] = {}; //relevant object
}
因此使用代理可能會矯枉過正。
在發佈問題前準備答案通常會更好,因此您可以一次性發布答案。節省這些情況發生。儘管如此,仍然有用。 – vlaz
@vlaz這是一個很好的觀點。我會在將來記住它。不過,我很高興Gothdo和其他人詳細闡述了這個機制的運作方式。 – GregRos