handler.isExtensible()

handler.isExtensible()Object.isExtensible() に対するトラップです。

構文

const p = new Proxy(target, {
  isExtensible: function(target) {
  }
});

引数

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

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

返値

isExtensible メソッドは真偽値を返さなければなりません。

解説

handler.isExtensible() メソッドは Object.isExtensible() に対するトラップです。

介入

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

不変条件

以下の不変条件に違反している場合、プロキシは TypeError を発生します。

  • Object.isExtensible(proxy)Object.isExtensible(target) と同じ値を返さなければなりません。

getOwnPropertyNames のトラップ

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

const p = new Proxy({}, {
  isExtensible: function(target) {
    console.log('called');
    return true;
  }
});

console.log(Object.isExtensible(p)); // "called"
                                     // true

次のコードでは不変条件に違反します。

const p = new Proxy({}, {
  isExtensible: function(target) {
    return false;
  }
});

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

仕様書

仕様書
ECMAScript (ECMA-262)
[[IsExtensible]] の定義

ブラウザーの互換性

BCD tables only load in the browser

関連情報