instanceof演算子で親クラスと子クラスを比較判定する
JSの自作クラスの型判定に instanceof
演算子を使ったりするが、この演算子を用いて親クラスと子クラスを比較すると true
を返す。
例えば、親クラスとしてFooクラスを、子クラスとしてFooクラスを継承したBarクラスを作成し、Fooクラスに同じクラス型かどうかを判定するequalsメソッドを実装してみる。
class Foo { equals(object) { console.log(object); // Bar {} console.log(object.constructor); // [Function: Bar] console.log(this.constructor); // [Function: Foo] // 右辺はBarオブジェクト、左辺はFooオブジェクト関数 return object instanceof this.constructor; } } class Bar extends Foo { } console.log(new Foo().equals(new Bar())); // true
両者を区別したいなら、オブジェクト関数同士を ===
演算子で比較する。
class Foo { equals(object) { ... return object.constructor === this.constructor; // return object instanceof this.constructor; } } ... console.log(new Foo().equals(new Bar())); // false