instanceof 通过检查对象原型链上的 prototype 属性来判断引用类型。具体做法是获取右侧构造函数的 prototype 对象,然后沿着左侧实例的 [[prototype]](即 __proto__)向上查找,若两者指向同一对象则返回 true。

如何验证自定义类的继承关系
对于自定义类,instanceof 同样遵循原型链查找规则。只要子类的原型对象位于父类原型对象的原型链上,或者子类实例直接拥有父类原型,判断即为真。这要求必须正确设置原型链,否则无法识别。

class Animal {
}
class Dog extends Animal {
}
const dog = new Dog();
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
console.log(dog instanceof Object); // true
为什么 instanceof 可能误判或失效
instanceof 在跨 iframe 或不同全局作用域时可能失效,因为不同上下文中的构造函数不是同一个对象。此外,如果手动修改了 prototype 属性,也可能导致判断结果不符合预期。此时应使用 Object.prototype.toString.call() 进行更精确的类型检测。

function checkType(obj) {
return Object.prototype.toString.call(obj);
}
console.log(checkType([])); // [object Array]
console.log(checkType({})); // [object Object]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











