【JavaScript ECMAScript】Proxy::handler.hasインスタンスメソッドの使い方
handler.has()インスタンスメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
handler.has()メソッドは、JavaScriptのProxyオブジェクトにおいて、オブジェクトのプロパティの存在確認操作をインターセプト(捕捉)するメソッドです。これは、in演算子(例: 'prop' in obj)やwith文、Reflect.has()メソッドなどで、オブジェクトが特定のプロパティを持っているかどうかがチェックされた際に実行されます。
このメソッドの主な目的は、オブジェクトのプロパティの存在に関する挙動をカスタマイズすることにあります。handler.has()メソッドは二つの引数を受け取ります。一つ目は、プロキシの対象となっている実際のオブジェクト本体であるtarget、二つ目は存在を確認したいプロパティの名前を表すkey(文字列またはSymbol)です。メソッドは、指定されたkeyを持つプロパティが存在するとみなす場合はtrueを、存在しないとみなす場合はfalseを返します。
例えば、通常は存在しない仮想的なプロパティが存在するかのように振る舞わせたり、あるいは本来存在するプロパティを外部からは見えないように隠蔽したりする、といった高度な操作を実装するために利用できます。
ただし、重要な不変条件があります。もしtargetオブジェクトがObject.preventExtensions()などで拡張不可能に設定されており、かつ自身でkeyという名前のプロパティを既に持っている場合、handler.has()メソッドは必ずtrueを返さなければなりません。この条件に違反するとTypeErrorが発生し、プロキシの整合性が保てなくなりますので注意が必要です。
構文(syntax)
1const targetObject = {}; 2 3new Proxy(targetObject, { 4 has(target, prop) { 5 return true; 6 } 7});
引数(parameters)
target, key
- target: Proxy オブジェクトがラップしている元のオブジェクト
- key: プロパティのキー (シンボルまたは文字列)
戻り値(return)
boolean
handler.has() メソッドは、プロキシオブジェクトに対して in 演算子が使用された際に呼び出されます。このメソッドは、プロキシオブジェクトが指定されたプロパティを保持しているかどうかを示す真偽値(true または false)を返します。