Reflect.preventExtensions()

Baseline 已广泛支持

此特性已非常成熟,可在多种设备和浏览器版本上使用。自 ⁨2016 年 9 月⁩以来,它已在各大浏览器中可用。

Reflect.preventExtensions() 静态方法类似于 Object.preventExtensions()。它阻止向对象添加新属性(即,阻止将来对对象进行扩展)。

试一试

const object = {};

console.log(Reflect.isExtensible(object));
// Expected output: true

Reflect.preventExtensions(object);

console.log(Reflect.isExtensible(object));
// Expected output: false

语法

js
Reflect.preventExtensions(target)

参数

目标

要阻止扩展的目标对象。

返回值

一个 Boolean,指示目标是否已成功设置为阻止扩展。

异常

TypeError

如果 target 不是一个对象,则抛出。

描述

Reflect.preventExtensions() 提供了阻止对象扩展的反射语义。与 Object.preventExtensions() 的区别在于:

  • 如果目标不是对象,Reflect.preventExtensions() 会抛出 TypeError,而 Object.preventExtensions() 则始终将非对象目标按原样返回。
  • Reflect.preventExtensions() 返回一个 Boolean,指示目标是否已成功设置为阻止扩展,而 Object.preventExtensions() 返回目标对象。

Reflect.preventExtensions() 调用 target[[PreventExtensions]] 对象内部方法

示例

使用 Reflect.preventExtensions()

另请参阅 Object.preventExtensions()

js
// Objects are extensible by default.
const empty = {};
Reflect.isExtensible(empty); // true

// … but that can be changed.
Reflect.preventExtensions(empty);
Reflect.isExtensible(empty); // false

与 Object.preventExtensions() 的区别

如果此方法的 target 参数不是对象(原始值),则会引发 TypeError。使用 Object.preventExtensions() 时,非对象 target 将按原样返回,不会报错。

js
Reflect.preventExtensions(1);
// TypeError: 1 is not an object

Object.preventExtensions(1);
// 1

规范

规范
ECMAScript® 2026 语言规范
# sec-reflect.preventextensions

浏览器兼容性

另见