instanceof
是 JavaScript 中的一个二元操作符,用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
当我们使用语法 object instanceof Constructor
时,instanceof
会沿着 object
的原型链向上查找,检查是否有原型对象等于 Constructor.prototype
。如果找到了这样的原型,instanceof
就会返回 true
;如果一直查找到原型链的顶端(也就是 null
),依然没有找到,就会返回 false
。
原型链是 JavaScript 中实现继承的一种机制。每个对象都有一个内部链接指向另一个对象,即它的原型。那个原型对象也有自己的原型,以此类推,直到一个对象的原型为 null
。常见的 Object.prototype
就是很多对象原型链的终点。
这里举一个例子来说明 instanceof
的工作原理:
javascriptfunction Car(make, model) { this.make = make; this.model = model; } const myCar = new Car('Toyota', 'Corolla'); console.log(myCar instanceof Car); // 输出:true console.log(myCar instanceof Object); // 输出:true
在这个例子中,myCar instanceof Car
返回 true
,因为 Car.prototype
在 myCar
的原型链上。
myCar instanceof Object
也返回 true
,尽管我们没有直接设置 myCar
的原型为 Object.prototype
。但由于 JavaScript 中几乎所有对象的原型链的最终都会指向 Object.prototype
,因此任何对象基本上都是 Object
的一个实例。
总的来说,instanceof
操作符提供了一种检查对象类型的方法,并且能够识别对象继承关系中的原型。