Proxy handler.has() 方法

admin發表於2019-04-10

此方法可以攔截屬性檢索操作。

返回一個布林值用來標識target物件是否具有指定屬性。

關於Proxy更多內容可以參閱ES2015 Proxy和Reflect一章節。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
Reflect.has(target, propertyKey)

引數解析:

(1).target:可選,要被代理的目標物件。

(2).propertyKey:可選,屬性名稱。

被攔截的操作如下:

(1).屬性檢索in操作(包括原型鏈上的屬性)。

(2).Reflect.has()方法。

特別說明:

(1).如果target物件指定自有屬性是不可配置,那麼返回值必須是true。

(2).如果target物件是不可擴充套件,且指定屬性是target物件自有,那麼返回值必須是true。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let antzone = {
  webName: "螞蟻部落",
  url:"www.softwhy.com"
}
var p = new Proxy(antzone, {
  has: function(target, prop) {
    console.log(prop);
    return true;
  }
});
console.log("webName" in p);

in操作可以被handler.has()方法攔截。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let antzone = {
  webName: "螞蟻部落",
  url:"www.softwhy.com"
}
Object.preventExtensions(antzone);
var p = new Proxy(antzone, {
  has: function(target, prop) {
    console.log(prop);
    return false;
  }
});
console.log("webName" in p);

上面的程式碼會報錯,因為antzone物件是不可擴充套件,所以handler.has()返回值必須是true。

相關文章