deleteProperty()捕获器会在delete 操作符中被调用。对应的反射API 方法为Reflect.
deleteProperty()。
const myTarget = {};
const proxy = new Proxy(myTarget, {
deleteProperty(target, property) {
console.log(‘deleteProperty()’);
return Reflect.deleteProperty(…arguments)
}
});
delete proxy.foo
// deleteProperty()
- 返回值
deleteProperty()必须返回布尔值,表示删除属性是否成功。返回非布尔值会被转型为布尔值。 - 拦截的操作
delete proxy.property
delete proxy[property]
Reflect.deleteProperty(proxy, property) - 捕获器处理程序参数
target:目标对象。
property:引用的目标对象上的字符串键属性。 - 捕获器不变式
如果自有的target.property 存在且不可配置,则处理程序不能删除这个属性。
ownKeys()
ownKeys()捕获器会在Object.keys()及类似方法中被调用。对应的反射API 方法为Reflect.
ownKeys()。
const myTarget = {};
const proxy = new Proxy(myTarget, {
ownKeys(target) {
console.log(‘ownKeys()’);
return Reflect.ownKeys(…arguments)
}
});
Object.keys(proxy);
// ownKeys() - 返回值
ownKeys()必须返回包含字符串或符号的可枚举对象。 - 拦截的操作
Object.getOwnPropertyNames(proxy)
Object.getOwnPropertySymbols(proxy)
Object.keys(proxy)
Reflect.ownKeys(proxy) - 捕获器处理程序参数
target:目标对象。 - 捕获器不变式
返回的可枚举对象必须包含target 的所有不可配置的自有属性。
如果target 不可扩展,则返回可枚举对象必须准确地包含自有属性键。