【JavaScript ECMAScript】Proxy::handler.isExtensibleインスタンスメソッドの使い方
handler.isExtensible()インスタンスメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
handler.isExtensible()メソッドは、Proxyオブジェクトの挙動をカスタマイズするためのハンドラーオブジェクトに定義されるメソッドで、プロキシがラップするターゲットオブジェクトが拡張可能であるかを判定し報告します。
このメソッドは、Proxyオブジェクトに対してObject.isExtensible()関数が呼び出された際に「トラップ」として実行されます。引数として、プロキシがラップしている元のオブジェクトであるtargetを受け取ります。そして、ターゲットオブジェクトが新しいプロパティを追加できる状態であればtrueを、そうでない(拡張不可能な)状態であればfalseを真偽値として返します。
特に重要な制約として、このhandler.isExtensible()メソッドが返す真偽値は、ラップしているターゲットオブジェクトそのものにObject.isExtensible()を実行した場合の戻り値と常に一致していなければなりません。もし一致しない値を返そうとすると、JavaScriptエンジンはTypeErrorをスローし、プロキシとターゲットオブジェクト間の整合性を強制的に維持します。この制約は、プロキシがターゲットオブジェクトの基本的な性質に関して矛盾した情報を提供することを防ぎ、予測可能な振る舞いを保証するために不可欠です。
handler.isExtensible()をハンドラーに定義しない場合、デフォルトではObject.isExtensible(target)が直接呼び出される標準の動作が適用されます。このメソッドは、オブジェクトの拡張可能性を監視したり、特定のセキュリティポリシーに基づいてオブジェクトの構造変更を制御したりする際に活用されます。
構文(syntax)
1new Proxy(target, { 2 isExtensible(target) { 3 return Reflect.isExtensible(target); 4 } 5});
引数(parameters)
target
- target: object: プロキシ対象のオブジェクト
戻り値(return)
boolean
対象のProxyオブジェクトが拡張可能であるかどうかを示します。拡張可能であればtrue、そうでなければfalseを返します。