instanceof 演算子でオブジェクトが特定のクラスに属しているのかを確認することができます。また、継承も考慮されます。
このようなチェックが必要なケースは多々あるかもしれません。ここでは、その型に応じて引数を別々に扱う 多形(ポリモーフィック) 関数を構築するために使用します。
instanceof 演算子
構文は次の通りです:
obj instanceof Class
それは obj が Class (または、それを継承しているクラス)に属している場合に true を返します。
例:
class Rabbit {}
let rabbit = new Rabbit();
// Rabbit クラスのオブジェクト?
alert( rabbit instanceof Rabbit ); // true
コンストラクタ関数でも動作します。:
// class の代わり
function Rabbit() {}
alert( new Rabbit() instanceof Rabbit ); // true
…また Array のような組み込みクラスでも動作します。:
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
arr は Object クラスにも属していることに留意してください。Array はプロトタイプ的に Object を継承しているためです。
通常、instanceof 演算子はチェックのためにプロトタイプチェーンを検査します。この動きに対して、静的メソッド Symbol.hasInstance でカスタムロジックが設定できます。
obj instanceof Class のアルゴリズムはおおまかに次のように動作します。:
-
もし静的メソッド
Symbol.hasInstanceがあれば、それ(Class[Symbol.hasInstance](obj))を使います。これはtrueまたはfalseを返す必要があり、これでinstanceof