instanceof检测的原理和简单实现

instanceof

instanceof就是通过判断左边对象的原型琏中是否存在右边构造函数的prototype来判断类型, a instanceof b,就是判断a的原型琏上是否有b.prototype
基本类型的构造函数有Number,Boolean,String,Null,Undefined,Symbol
复杂类型的构造函数有Object,Array,Function,RegExp,Date..

注意

instanceof的左边数据必须是对象类型,如果是基本类型是一定返回false的,就像下面这种情况,通过new后num不再是基本类型

let num = 1
num.__proto__ === Number.prototype // true
num instanceof Number // false

num = new Number(1)
num.__proto__ === Number.prototype // true
num instanceof Number // true

原理

instanceof原理是通过判断右边变量的prototype在左边变量的原型琏上,在就为true,不再为false

简单实现

function myInstanceof(leftVaule, rightVaule) { 
    let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值
    leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值
    while (true) {
        if (leftVaule === null) {
            return false;    
        }
        if (leftVaule === rightProto) {
            return true;    
        } 
        leftVaule = leftVaule.__proto__ 
    }
}

 

 



原理
posted @ 2019-08-29 19:50  大笛子  阅读(410)  评论(0编辑  收藏  举报