Proxy handler.deleteProperty() 方法

admin發表於2019-04-15

關於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()方法一章節。

相關文章