博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
instanceOf 运算符原理
阅读量:3959 次
发布时间:2019-05-24

本文共 912 字,大约阅读时间需要 3 分钟。

定义

instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置。 —— MDN

简单理解为:instanceof可以检测一个实例是否属于某种类型。

function Foo(){
}const a = new Foo()a instanceof Foo // truea instanceof Object // true

还可以在继承关系中用来判断一个实例是否属于它的父类型。

function Foo(){
}function Child(){
}function Other(){
}Child.prototype = new Foo // 继承原型const b = new Child()b instanceof Foo // trueb instanceof Child // trueb instanceof Other // falseb instanceof Object // true

实现

查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。

如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototypenull将会报错(类似于空指针异常)。

函数模拟 A instanceof B:

/*** @param obj{Object} 测试对象* @param fun{Function} 构造函数*/function instanceOf(A, B) {
let obj = A.__proto__ let fn = B.prototype while (true) {
if (obj === null) return false // 这里重点:当 fn 严格等于 obj 时,则返回 true if (fn === obj) return true obj = obj.__proto__ }}

转载地址:http://dsozi.baihongyu.com/

你可能感兴趣的文章
同时装了Python3和Python2,怎么用pip?
查看>>
linux tar 解压缩zip文件报错的解决
查看>>
vim,ctag和Taglist
查看>>
Ubuntu的apt命令详解
查看>>
Ubuntu Server 设置sshd
查看>>
sort,uniq命令的使用。
查看>>
linux下md5加密(使用openssl库C实现)
查看>>
openssl、MD5的linux安装方法
查看>>
DevC++ 工程没有调试信息的解决办法
查看>>
http消息长度的确定
查看>>
手机和电脑如何连接蓝牙
查看>>
HTTP协议参数
查看>>
wireshark检索命令
查看>>
五人分鱼问题(附答案)
查看>>
linux查看文件有多少行
查看>>
error:previous declartion of "XXX" is here的解决方法
查看>>
sha1的几个函数的使用
查看>>
为什么int型的数组用memset不能清零(memset的使用规范)
查看>>
<转>CRC校验、MD5、SHA1算法的概念和可靠性现状
查看>>
linux杀死进程详解
查看>>