Proxy handler.preventExtensions() 方法

admin發表於2019-06-16

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

此方法可以攔截Object.preventExtensions()操作。

返回一個布林值用來說明操作是否成功。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
var p = new Proxy(target, {
  preventExtensions: function (target) {
    //code
  }
});

引數解析:

(1).target:原始target目標物件。

特別說明:如果target物件是不可擴充套件的,那麼handler.preventExtensions()返回值必須是true,否則報錯。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var antzone = {
  webName: "螞蟻部落",
  url: "www.softwhy.com",
  age: 4,
  address:"青島市南區"
}
var p = new Proxy(antzone, {
  preventExtensions: function (target) {
    return true;
  }
});
console.log(Object.preventExtensions(p))

上面的程式碼會報錯,因為Object.isExtensible(antzone)返回值是true,handler.preventExtensions()返回值不能是true。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var antzone = {
  webName: "螞蟻部落",
  url: "www.softwhy.com",
  age: 4,
  address:"青島市南區"
}
var p = new Proxy(antzone, {
  preventExtensions: function (target) {
    Object.preventExtensions(target);
    return true;
  }
});
console.log(Object.preventExtensions(p))

上面的程式碼不會報錯,因為通過Object.preventExtensions(target)將target物件設定為不可擴充套件。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var antzone = {
  webName: "螞蟻部落",
  url: "www.softwhy.com",
  age: 4,
  address:"青島市南區"
}
var p = new Proxy(antzone, {
  preventExtensions: function (target) {
    Object.preventExtensions(target);
    return true;
  }
});
console.log(Reflect.preventExtensions(p))

Object.preventExtensions()操作也會被handler.preventExtensions()方法攔截。

相關文章