instanceof
是 JavaScript 中的一个操作符,用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。这个操作符主要用于判断一个对象是否是某个特定构造函数的实例。
instanceof
的基本语法如下:
object instanceof constructor
object
是需要检测的对象。constructor
是某个构造函数。如果 object
是 constructor
的实例,或者 object
的原型链上存在 constructor.prototype
,则返回 true
;否则返回 false
。
function Person(name) {
this.name = name;
}
const alice = new Person('Alice');
console.log(alice instanceof Person); // true
console.log(alice instanceof Object); // true
console.log(alice instanceof Array); // false
instanceof
可以用来检查对象是否属于某个类。instanceof
来决定调用哪个方法。instanceof
检查可能失败当在不同的窗口或框架(iframe)中创建对象时,由于每个窗口或框架都有自己的全局环境,因此即使构造函数相同,instanceof
检查也可能失败。
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const IFramePerson = iframe.contentWindow.Person;
const bob = new IFramePerson('Bob');
console.log(bob instanceof Person); // false
console.log(bob instanceof IFramePerson); // true
解决方法:
Object.prototype.toString.call(object)
方法来获取对象的内部 [[Class]] 属性,这是一种更可靠的跨窗口类型检查方法。function getType(obj) {
return Object.prototype.toString.call(obj).slice(8, -1);
}
console.log(getType(bob)); // "Object"
instanceof
可以直接判断对象的类型,代码简洁易懂。总之,instanceof
是 JavaScript 中一个非常有用的操作符,可以帮助开发者进行类型检查和继承验证。在使用时需要注意跨窗口或框架的特殊情况,并采取相应的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云