instanceof 的基本语法object instanceof constructor
object 是要进行检查的对象。constructor 是构造函数,用来检测 object 是否是其实例。instanceof 的工作原理instanceof 的核心机制是基于原型链的检查。它的工作原理如下:
获取构造函数的 prototype:首先,instanceof 操作符会从构造函数中获取 prototype 属性,这就是构造函数的原型对象。
沿原型链查找:然后,instanceof 会检查对象的原型链,看是否存在构造函数的原型对象。如果找到匹配的原型对象,则返回 true;如果遍历到 Object.prototype 仍然没有找到,则返回 false。
原型链的终点:如果对象的原型链上存在构造函数的 prototype 对象,表示对象是构造函数的实例,返回 true。否则,返回 false。
function Animal() {}
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
const myDog = new Dog();
console.log(myDog instanceof Dog); // true
console.log(myDog instanceof Animal); // true
console.log(myDog instanceof Object); // true
console.log(myDog instanceof Array); // false
在这个示例中:
myDog instanceof Dog 返回 true,因为 myDog 是 Dog 的实例。myDog instanceof Animal 返回 true,因为 Dog 的原型继承自 Animal 的原型。myDog instanceof Object 返回 true,因为 Object 是所有对象的原型链的终点。myDog instanceof Array 返回 false,因为 myDog 的原型链上没有 Array 的原型对象。instanceof 的实现如果要实现 instanceof 的逻辑,可以通过以下步骤:
Object.prototype。以下是一个自定义实现 instanceof 的简单示例:
function myInstanceof(obj, constructor) {
// 获取构造函数的原型对象
let proto = Object.getPrototypeOf(obj);
while (proto !== null) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
function Animal() {}
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
const myDog = new Dog();
console.log(myInstanceof(myDog, Dog)); // true
console.log(myInstanceof(myDog, Animal)); // true
console.log(myInstanceof(myDog, Object)); // true
console.log(myInstanceof(myDog, Array)); // false
Object.getPrototypeOf(obj) 获取对象的原型。while 循环沿原型链向上查找,直到找到匹配的原型对象或到达 null。true,否则返回 false。instanceof:用于判断一个对象是否是某个构造函数的实例。