Я пытаюсь использовать прокси -прокси JavaScript, чтобы скрыть свойство от обнаружения, сохраняя его в целевом объекте. The Has Trap успешно делает «секрет» в Proxy вернуть false , но свойство по -прежнему доступно напрямую. Пример кода:
const target = { secret: 123, public: 456 };
const proxy = new Proxy(target, {
has(t, prop) {
if (prop === 'secret') return false; // Hide from `in` checks
return prop in t;
}
});
console.log('secret' in proxy);
console.log(proxy.secret);
Вопросы:
Почему оператор в не блокирует Direct Доступ к собственности? Есть ли конкретные ловушки (например, Get , ownkeys ), которые должны быть реализованы вместе для согласованности?
Я пытаюсь использовать прокси -прокси JavaScript, чтобы скрыть свойство от обнаружения, сохраняя его в целевом объекте. The Has Trap успешно делает «секрет» в Proxy вернуть false , но свойство по -прежнему доступно напрямую. [b] Пример кода: [/b] [code]const target = { secret: 123, public: 456 }; const proxy = new Proxy(target, { has(t, prop) { if (prop === 'secret') return false; // Hide from `in` checks return prop in t; } });
console.log('secret' in proxy); console.log(proxy.secret); [/code] [b] Вопросы: [/b] [list] [*] Почему оператор в не блокирует Direct Доступ к собственности? Есть ли конкретные ловушки (например, Get , ownkeys ), которые должны быть реализованы вместе для согласованности? [/list] [b] наблюдаемое поведение: < /p> [list] [*][code]'secret' in proxy[/code] правильно возвращает false . [*][code]proxy.secret[/code] по -прежнему возвращает значение 123 . [/list] ожидаемое поведение: [/b]
Если оператор in возвращает false для 'secret' , доступ к proxy.secret должен выбросить ошибку или вернуть Undefined . [b] попытки исправить: [/b] [list] [*] Пробовал только с помощью trap. < br/> [*] Исследуют другие ловушки, такие как Get и ownkeys , но не уверены, как их координировать. [/list]