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

瀏覽器相容性

另見