【JSリファレンス】Function.prototype[@@hasInstance]()
更新日:2024/06/14
Function.prototype[@@hasInstance]()は、Functionオブジェクト(Functionコンストラクターのインスタンス)のプロトタイプチェーンに組み込まれるメソッドです。
@@hasInstanceは仕様上の表記です。
プログラムコード上では、Symbol.hasInstanceに置き換えられます。
Function.prototype[Symbol.hasInstance]()は、自分自身がinstanceof演算子の右辺にあるときに呼び出され、左辺のオブジェクトが自分自身のインスタンスかどうかを判定して返します。
■構文
Function.prototype [ @@hasInstance ] ( V )
- V: Functionオブジェクトのインスタンスかどうかを判定する値
※Functionオブジェクトのprototypeプロパティが、Vのプロトタイプ上にあるかどうかを判定します。
そうでないなら、false
■使用例
Symbol.hasInstanceプロパティを上書きすることで、インスタンス判定をカスタマイズできます。
const Fobj ={};
const F = function(){};
// Fobj を F のインスタンスとみなす
Object.defineProperty( F , Symbol.hasInstance ,{
value:function(V){
if( V === Fobj ) return true;
return Function
.prototype[Symbol.hasInstance].call(this,V);
}
});
console.log( new F() instanceof F ); // true
console.log( Fobj instanceof F ); // true
Object.defineProperty()でプロパティ追加しています。
Function.prototype[Symbol.hasInstance]()のWritable属性がfalseのためです。
プロトタイプ上のプロパティのWritable属性がfalseの場合、代入式でオブジェクトに同名のプロパティを追加できません。
しかしObject.defineProperty()なら、追加可能です。
関連ページ
更新日:2024/06/14
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。