JavaScript Guidebook

JavaScript 完全知识体系

Proxy - handler.deleteProperty

handler.deleteProperty() 方法主要用于拦截 delete 运算命令。

语法

const proxy = new Proxy(target, {
deleteProperty: function(target, property) {
// do something
},
});
参数说明类型
target目标对象object
property待删除的属性名string

说明

拦截

该方法会拦截目标对象的以下操作:

  • 删除属性:delete proxy[foo]delete proxy.foo
  • Reflect.deleteProperty()

约束

如果违背了以下的约束,proxy 会抛出 TypeError 异常:

  • 如果目标对象的属性是不可配置的,那么该属性不能被删除

示例

下面示例为删除第一个字符为下划线的属性会报错。

const handler = {
deleteProperty(target, key) {
invariant(key, 'delete');
delete target[key];
return true;
},
};
function invariant(key, action) {
if (key[0] === '_') {
throw new Error(`Invalid attempt to ${action} private "${key}" property`);
}
}
const target = { _prop: 'foo' };
const proxy = new Proxy(target, handler);
delete proxy._prop;
// Uncaught Error: Invalid attempt to delete private "_prop" property