instanceof
是 JavaScript 中的一个运算符,用于检测一个对象是否是某个构造函数的实例。它基于原型链进行检查,如果对象的原型链上存在构造函数的 prototype
属性,则返回 true
,否则返回 false
。
[[Prototype]]
,它指向另一个对象,即该对象的原型。当试图访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript 会沿着原型链向上查找,直到找到该属性或者到达原型链的末端(null
)。new
关键字调用构造函数时,会创建一个新的对象,并将构造函数的 this
绑定到这个新对象上。instanceof
可以用来检查一个对象是否是由特定的构造函数创建的,这对于类型检查和确保对象的正确性很有用。instanceof
可以很好地处理跨iframe或跨窗口的对象实例检查。instanceof
运算符本身没有类型,它返回一个布尔值:true
或 false
。
instanceof
来确定一个对象是否属于某个特定的框架或库,比如检查一个对象是否是某个 DOM 元素的实例。function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);
console.log(auto instanceof Car); // true
console.log(auto instanceof Object); // true,因为所有对象都是 Object 的实例
instanceof
检查失效在不同的 iframe 或窗口中,即使两个对象是由相同的构造函数创建的,它们也不会被认为是同一个构造函数的实例,因为每个 iframe 或窗口都有自己的全局上下文和原型链。
解决方法:
Object.prototype.toString.call(obj)
来获取对象的内部 [[Class]]
属性,这是一种更通用的检查对象类型的方法。Object.prototype.toString.call
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);
console.log(Object.prototype.toString.call(auto) === '[object Object]'); // true
这种方法可以用来检查对象是否是普通对象,但它不会告诉你对象是由哪个构造函数创建的。如果需要检查特定的构造函数,通常需要在同一个全局上下文中进行。
领取专属 10元无门槛券
手把手带您无忧上云