📅  最后修改于: 2023-12-03 14:42:28.159000             🧑  作者: Mango
在 JavaScript 中,handler.has() 方法可以用于拦截对任何属性的 in 操作符。这个方法主要用于 Proxy 对象中。
const proxy = new Proxy(target, {
has: function(target, propKey) {
...
}
});
target
:目标对象propKey
:要查询的属性的键名当使用 in 操作符查询一个属性时,会触发 handler.has() 方法。该方法接收两个参数:
你需要在该方法中返回一个 Boolean 值,用于表示该属性是否存在于目标对象中。如果返回 true,表示该属性存在;如果返回 false,表示该属性不存在。
let person = {
name: 'Alice',
age: 20
};
let proxy = new Proxy(person, {
has(target, propKey) {
if (propKey === 'age') {
console.log('deny access to age property');
return false;
}
return propKey in target;
}
});
console.log('name' in proxy); // true
console.log('age' in proxy); // false
在上面的示例中,我们创建了一个名为 person 的对象,并创建了一个名为 proxy 的代理对象。当我们使用 in 操作符查询 name 属性时,返回 true;当查询 age 属性时,我们拦截了该操作,并返回 false,表示该属性不存在。