JavaScript instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。(MDN)
instanceof 是另一种检测类型的手段,但通常用于检测对象之间的关系,如某个对象是不是由某个构造函数生成的。
function Person(name) {
this.name = name;
}
var person = new Person('小明');
console.log(
person instanceof Person,
); // 输出:true
代码块
预览
复制
1. 语法
对象 instanceof 构造函数;
代码块
预览
复制
虽然语法是这样的,其实左侧可以是任意数据类型,但右侧必须是一个函数。
否则会报如下错误:
[] instanceof {};
// Uncaught TypeError: Right-hand side of 'instanceof' is not callable
代码块
预览
复制
错误大致意思是 instanceof 的右操作数不能被调用。
在 JavaScript ,可被调用的目前只有函数。
2. 注意点
使用 instanceof 检测的时候,不一定只有一个为 true 的结果。
function Person(name) {
this.name = name;
}
var person = new Person('小明');
console.log(
person instanceof Person,
person instanceof Object,
); // 输出:true
代码块
预览
复制
因为 instanceof 实际上是去左操作数的原型链上寻找有没有右操作数的原型。
person 的原型链上既匹配到 Person.prototype 又能匹配到 Object.prototype,所以都能返回 true。
使用的时候要注意这个问题,如判断某个对象的原型链上是否有 Object.prototype 的时候,要考虑到一些其他对象。
[] instanceof Object; // true
代码块
预览
复制
数组的原型链上也是有 Object.prototype 的,所以做一些检测的时候要考虑一些特殊情况。
3. 小结
instanceof 可以用来检测对象和构造函数之间的关系,其检测的原理是左操作数的原型上是否有右操作数的 prototype 属性,所以要注意一些检测的特殊情况。
JavaScript instanceof
51/80
目录
书签
收藏
A
大小