Я был на самом деле собирался ответить на мой вопрос сам, но я был слишком медленным, и другие ответили на него первым (и к тому же добавили очень полезную информацию). Тем не менее, вот ответ, который я хотел написать, в случае, если это может помочь кому-то как-то:
Оказывается, что 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"];
}
в целом, так как вы должны возвращать массив свойств, когда вы ловушка ownKeys
, использование прокси-сервера, похоже, не делает вещи намного лучше в этом случае использования. Я думаю, что для большинства ситуаций, следующий будет работать так же хорошо, и менее хрупок:
let obj = {};
let keys = ["a" , "b"];
for (let key of keys) {
obj[key] = {}; //relevant object
}
Таким образом, используя прокси-сервер может быть излишним.
Обычно лучше подготовить ответ перед отправкой вопроса, чтобы вы могли опубликовать его сразу. Экономит на таких ситуациях. Тем не менее, полезно все же. – vlaz
@vlaz это хороший момент. Я запомню это в будущем. Тем не менее, я рад, что Готдо и другие подробно остановились на том, как работает механизм. – GregRos