彻底了解instanceof的底层实现原理

本文详细探讨了JavaScript中instanceof操作符的作用和语法,它用于判断实例与构造函数或其父类型的关联。通过遍历原型链,instanceof确定原型是否匹配。内容包括基础和复杂类型、继承关系的判断以及在不同继承场景下的应用,并提醒了使用时需要注意的问题。
摘要由CSDN通过智能技术生成

一、作用
①用于判断某个实例是否属于某构造函数
②在继承关系中用来判断一个实例是否属于它的父类型或者祖先类型的实例
说白了,只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false

二、语法
[对象] instanceof [构造函数]
如:

var obj = new Object()
obj instanceof Object // true

三、涉及的构造函数
基础类型:String、Number、Boolean、Undefined、Null、Symbol
复杂类型:Array,Object
其他类型:Function、RegExp、Date

四、底层原理

function instance_of(L, R) {
   
    var O = R.prototype; 
    L = L.__proto__;
    while (true) {
       
        if (L === null)      
             return false;   
        if (O === L) 
             return true;   
        L = L.__proto__;  
    }
}

代码解释:
①L表示对象实例,R表示构造函数或者父类型实例
②取R的显式原型,取L的隐式原型
③循环遍历,进行判断②中的两个值是否相等,相等返回true,不相等继续查找L的原型链

五、未发生继承关系时

function Cat(name,age,type){
   
    this.name = name;
    this.age = age;
    this.type = type;
}
function Dog(name){
   
    this.name = name;
}
var</
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值