此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

handler.preventExtensions()

基线 广泛可用

自 2016年9月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

handler.preventExtensions() 方法用于设置对Object.preventExtensions()的拦截

尝试一下

const monster1 = {
  canEvolve: true,
};

const handler1 = {
  preventExtensions(target) {
    target.canEvolve = false;
    Object.preventExtensions(target);
    return true;
  },
};

const proxy1 = new Proxy(monster1, handler1);

console.log(monster1.canEvolve);
// Expected output: true

Object.preventExtensions(proxy1);

console.log(monster1.canEvolve);
// Expected output: false

语法

js
var p = new Proxy(target, {
  preventExtensions: function (target) {},
});

参数

以下参数传递给 preventExtensions 方法。它会绑定到这个 handler.

target

所要拦截的目标对象。

返回值

preventExtensions 方法返回一个布尔值。

描述

handler.preventExtensions() 拦截 Object.preventExtensions()返回一个布尔值。

拦截

这个 trap 可以拦截这些操作:

约束

如果违反了下列规则,proxy 则会抛出一个 TypeError:

  • 如果目标对象是可扩展的,那么只能返回 false

示例

以下代码演示了如何拦截Object.preventExtensions()

js
var p = new Proxy(
  {},
  {
    preventExtensions: function (target) {
      console.log("called");
      Object.preventExtensions(target);
      return true;
    },
  },
);

console.log(Object.preventExtensions(p)); // "called"; outputs false

以下代码违反了约束。

js
var p = new Proxy(
  {},
  {
    preventExtensions: function (target) {
      return true;
    },
  },
);

Object.preventExtensions(p); // 抛出类型错误

规范

规范
ECMAScript® 2027 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-preventextensions

浏览器兼容性

参考