JavaScript instanceof

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

大小

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值