【Node.js24.x】Symbol::hasInstance定数の使い方
hasInstance定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Symbol.hasInstance定数は、JavaScriptにおいてinstanceof演算子の振る舞いをカスタマイズするために使用される、組み込みのシンボルを表す定数です。
シンボルは、一意で変更不可能な値を作成するために用いられるプリミティブなデータ型で、オブジェクトプロパティのキーとして使用されることで、名前の衝突を避けることができます。このSymbol.hasInstanceは、Symbolオブジェクトが提供する特別なシンボルの一つです。
通常、instanceof演算子は、あるオブジェクトが特定のコンストラクタのインスタンスであるかどうかを、そのオブジェクトのプロトタイプチェーンを辿って判定します。しかし、Symbol.hasInstanceを使用することで、このデフォルトのインスタンス判定ロジックをオーバーライドし、独自のカスタムロジックを定義することが可能になります。
具体的には、クラスやコンストラクタ関数に、static [Symbol.hasInstance](instance)という名前の静的メソッドを実装することで、そのクラスや関数がinstanceof演算子の右辺に置かれた際に、このメソッドが呼び出され、インスタンス判定の結果を制御できます。例えば、特定のインターフェースを持つオブジェクトや、特定の条件を満たすオブジェクトを、明示的な継承関係がなくても「インスタンス」とみなすような柔軟な判定ルールを導入することができます。
この定数は、より高度で複雑な型チェックやオブジェクトの分類ロジックを実装する際に、非常に強力なツールとなります。
構文(syntax)
1class MyCustomClass { 2 static [Symbol.hasInstance](instance) { 3 // ここに instanceof 演算子をカスタマイズするロジックを記述します。 4 // instance が MyCustomClass のインスタンスと見なされるべき場合に true を返します。 5 // 例: 特定のプロパティを持つオブジェクトを MyCustomClass のインスタンスと見なす。 6 return typeof instance === 'object' && instance !== null && 'customProperty' in instance; 7 } 8}
引数(parameters)
引数なし
引数はありません
戻り値(return)
symbol
Symbol.hasInstanceは、instanceof演算子によってオブジェクトのインスタンスチェックを行う際に、内部的に呼び出されるシンボルです。このシンボルは、特定のオブジェクトが他のオブジェクトのインスタンスであるかどうかを判定するためのカスタムロジックを定義するために使用されます。