子类实例既是子类类型也是父类类型,instanceof 对两者均返回 true;typeof 对所有类实例均返回 "object",无法区分具体类;constructor 属性可辅助识别但可被修改,instanceof 更安全。

子类实例既是子类类型,也是父类类型;用 instanceof 判断时,两者都返回 true。
instanceof 的行为表现
ES6 中通过 extends 实现继承后,子类实例的原型链上会包含父类的原型,因此:
-
sonInstance instanceof Son→ true -
sonInstance instanceof Parent→ true -
sonInstance instanceof Object→ true(因为所有类最终都继承自Object)
typeof 不能用于类实例类型判断
typeof 对所有对象实例(包括 class 实例)都返回 "object",无法区分具体类名:
-
typeof new Son()→"object" -
typeof new Parent()→"object" - 所以不能靠
typeof判断是哪个类的实例
constructor 属性可辅助识别
每个实例都有 constructor 属性,指向其构造函数:
-
new Son().constructor === Son→ true -
new Son().constructor === Parent→ false - 但注意:
constructor可被修改,不具绝对可靠性;instanceof更安全、更符合继承语义
Object.getPrototypeOf() 查看原型链
可用于验证继承关系:
-
Object.getPrototypeOf(new Son()) === Son.prototype→ true -
Object.getPrototypeOf(Son.prototype) === Parent.prototype→ true(若Son extends Parent) - 这说明子类原型链确实连到父类原型,支撑了
instanceof的判断逻辑











