【JavaScript ECMAScript】Proxy::handler.setPrototypeOfインスタンスメソッドの使い方
handler.setPrototypeOf()インスタンスメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
handler.setPrototypeOf()メソッドは、Proxyオブジェクトがラップする対象オブジェクトのプロトタイプを変更する操作をインターセプトし、その動作をカスタマイズするためのメソッドです。JavaScriptのオブジェクトは、他のオブジェクトから機能を受け継ぐ「プロトタイプ」という仕組みを持っていますが、このハンドラーはObject.setPrototypeOf()のような関数が、Proxyのターゲットオブジェクトのプロトタイプを変更しようとした際に呼び出されます。
メソッドは、変更対象のtargetオブジェクトと、新しく設定されるprototype(オブジェクトまたはnull)の二つの引数を受け取ります。そして、プロトタイプ変更が成功した場合はtrueを、失敗した場合はfalseを返します。falseを返すとTypeErrorが発生し、変更は拒否されます。
この機能により、開発者はプロトタイプ変更を監視し、特定の条件下でのみ変更を許可するといった高度な制御が可能です。これはオブジェクトのセキュリティや安定性を強化する上で有用です。特別な理由がない限りプロトタイプの変更は推奨されません。このハンドラーを定義しない場合やデフォルトの動作を許可する場合は、通常Reflect.setPrototypeOf()を使用します。
構文(syntax)
1new Proxy(target, { 2 setPrototypeOf(target, prototype) { 3 // ここにターゲットオブジェクトのプロトタイプをprototypeに設定するカスタムロジックを記述します。 4 // このメソッドは、操作が成功したかを示す真偽値を返すべきです。 5 } 6});
引数(parameters)
target, prototype
- target: Proxyオブジェクトがラップする元のオブジェクト
- prototype: targetに設定したいプロトタイプオブジェクト
戻り値(return)
boolean
Proxyオブジェクトのhandler.setPrototypeOf()メソッドは、Object.setPrototypeOf()操作が成功したかどうかを示す真偽値を返します。成功した場合はtrue、失敗した場合はfalseを返します。