class A {
constructor() {}
}
class B extends A {
constructor() {
super()
}
}
class C extends B {
constructor() {
super()
}
}
const a = new A()
const b = new B()
const c = new C()
console.log(c instanceof A) // true
console.log(c instanceof B) // true
console.log(c instanceof C) // true
// instanceof는 상속받은 클래스에 대해서 모두 true가 나온다.
console.log(c.constructor === A) // false
// c라는 인스턴스가 가진 constructor와 A 클래스의 constructor는 일치하지 않는다.
console.log(c.constructor === B) // false
// c라는 클래스의 constructor와 A 클래스의 constructor는 일치하지 않는다는 뜻이기도 하다
console.log(c.constructor === C) // true
//
instanceof
라는 키워드로 각각의 클래스와 비교하게되면 해당하는 인스턴스의 정확한 클래스(C)와도 true가 출력되지만 그 클래스가 상속받고 있는 부모 클래스(A, B)들도 true가 출력된다.
따라서, 한 인스턴스가 어느 클래스로 만들어진건지 확인하려면 constructor라는 속성을 일치 연산자로 비교하면 된다.
정말 유익한 글이었습니다.