このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

handler.preventExtensions()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2016年9月⁩.

handler.preventExtensions() はメソッドは、オブジェクトの [[PreventExtensions]] 内部メソッドに対するトラップです。 Object.preventExtensions() のような操作で使用されます。

試してみましょう

const monster = {
  canEvolve: true,
};

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

const proxy = new Proxy(monster, handler);

console.log(monster.canEvolve);
// 予想される結果: true

Object.preventExtensions(proxy);

console.log(monster.canEvolve);
// 予想される結果: false

構文

js
new Proxy(target, {
  preventExtensions(target) {
  }
})

引数

次の引数は preventExtensions() メソッドに渡されます。 this はハンドラーにバインドされます。

target

ターゲットオブジェクトです。

返値

preventExtensions() メソッドは、操作が成功したかどうかを示す Boolean を返す必要があります。それ以外の値は論理値に変換されます

多くの操作(Object.preventExtensions() を記載する)は、内部メソッド [[PreventExtensions]]false を返した場合、TypeError が発生します。

解説

介入

このトラップは下記の操作に介入できます。

他にも、[[PreventExtensions]] 内部メソッドを呼び出すあらゆる操作に介入できます。

不変条件

プロキシーの [[PreventExtensions]] 内部メソッドでは、ハンドラーの定義が以下のいずれかの不変条件に違反する場合、TypeError が発生します。

  • 結果は、ターゲットオブジェクトに対して handler.preventExtensions() を呼び出した後、 Reflect.isExtensible()false を返す場合のみ true になります。

preventExtensions のトラップ

次のコードでは Object.preventExtensions() をトラップします。

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

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

以下のコードは不変条件に違反しています。

js
const p = new Proxy(
  {},
  {
    preventExtensions(target) {
      return true;
    },
  },
);

Object.preventExtensions(p); // TypeError is thrown

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-preventextensions

ブラウザーの互換性

関連情報