instanceof 通过检查左操作数的原型链上是否存在右操作数的 prototype 属性来判断。具体做法是获取左操作数的内部原型 [[prototype]],沿着原型链向上遍历,直到找到与右操作数 prototype 相同的对象或到达 null。

如何判断一个实例是否属于特定构造函数
当使用 new 创建对象时,对象的内部原型会被自动设置为构造函数的 prototype 属性。因此,instanceof 能够正确识别由该构造函数创建的实例。

function Animal() {}
function Dog() {}
Dog.prototype = new Animal();
const myDog = new Dog();
console.log(myDog instanceof Dog); // true
console.log(myDog instanceof Animal); // true
修改 prototype 对 instanceof 的影响
如果手动修改了构造函数的 prototype 属性,原有的实例将不再被识别为新的类型,因为它们的原型链指向的是旧的对象。

function Cat() {}
const myCat = new Cat();
Cat.prototype = { name: 'New Cat' };
console.log(myCat instanceof Cat); // false
基于程序中某个输入、条件或结果的具体问题
在继承链中,子类实例也会被认为是父类的实例,因为子类的原型链包含了父类的原型。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











