广告
文章导航

Proxy handler.deleteProperty() 方法

2019-4-15 10:48| 作者: admin| 查看: 90| 评论: 0|来自: 蚂蚁部落

关于Proxy更多内容可以参阅Proxy和Reflect一章节。

此方法会拦截delete删除属性操作,返回一个布尔值用来标识删除操作是否成功。

语法结构:

[JavaScript] 纯文本查看 复制代码
var p = new Proxy(target, {
  deleteProperty: function (target, property) {
    //code
  }
})

参数解析:

(1).target:可选,被代理的目标对象。

(2).property:可选,要被删除的属性名称。

特别说明:不能删除target对象的不可配置的自有属性,否则会报错。

代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  url:"www.softwhy.com"
}
let p = new Proxy(antzone, {
  deleteProperty: function(target, prop) {
    console.log(prop);
    Reflect.deleteProperty(target, prop);
    return true;
  }
});
console.log(antzone.webName);
delete p.webName;
console.log(antzone.webName);

delete操作会被handler.deleteProperty()方法拦截,并进行相应的操作。

[JavaScript] 纯文本查看 复制代码运行代码
var antzone = {
  webName: "蚂蚁部落",
  url:"www.softwhy.com"
}
Object.defineProperty(antzone, "webName", {
  configurable: false
});
var p = new Proxy(antzone, {
  deleteProperty: function(target, prop) {
    console.log(prop);
    Reflect.deleteProperty(target, prop);
    return true;
  }
});
delete p.webName;

上面的代码会报错,因为webName属性是不可扩展的。

[JavaScript] 纯文本查看 复制代码运行代码
var antzone = {
  webName: "蚂蚁部落",
  url:"www.softwhy.com"
}
Object.defineProperty(antzone, "webName", {
  configurable: false
});
var p = new Proxy(antzone, {
  deleteProperty: function(target, prop) {
    console.log(prop);
    Reflect.deleteProperty(target, prop);
    return true;
  }
});
Reflect.deleteProperty(p.webName)

Reflect.deleteProperty()操作也会被handler.deleteProperty()方法拦截。

关于Reflect.deleteProperty()方法可以参阅Reflect.deleteProperty()方法一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部