Да, используя Proxy
с ловушкой handler.get()
:
const object = new Proxy({}, {
get (target, key) {
throw new Error(`attempted access of nonexistent key \`${key}\``);
}
})
object.foo
Если вы хотите изменить существующий объект с таким поведением, вы можете использовать Reflect.has()
, чтобы проверить существование свойства и определить, следует ли пересылатьдоступ с использованием Reflect.get()
или throw
:
const object = new Proxy({
name: 'Fred',
age: 42,
get foo () { return this.bar }
}, {
get (target, key, receiver) {
if (Reflect.has(target, key)) {
return Reflect.get(target, key, receiver)
} else {
throw new Error(`attempted access of nonexistent key \`${key}\``)
}
}
})
console.log(object.name)
console.log(object.age)
console.log(object.foo)