手写instanceof函数

220 阅读1分钟

前言

本文涉及知识点包括原型链相关知识等

原理

以左代表传入的实例对象,右代表传入的构造函数,方便理解

instanceof 底层原理就是通过判断左边的原型对象是否与右边的原型对象相等,从而判断左是不是右的实例成员

举例

定义一个数组,通过官方的instanceof关键字来作例子,判断当前的数组是否属于Array的实例成员

instanceof1.png

再来看看arr的原型对象以及Array的原型对象

instanceof2.png

instanceof3.png

手写instanceof函数

由上图可以看出,能充分证明开头说的原理是没有问题的,那既然如此,我们就可以开始手写instanceof函数了,老规矩left代表实例对象,right代表构造函数

function Myinstanceof(left,right){
    //获取left的原型对象和right的原型对象作对比
    left = left.__proto__;
    right = right.prototype;
    //循环遍历一直沿着原型链往上找left的原型对象并作对比,当left原型对象为null时则结束
    while(true){
        if(left === null)return false;
        if(left===right) return true;
        left=left.__proto__;
    }
}

至此,instanceof函数就写完了,下面进行测试

成功测试


// 定义一个类
    class Test {}
    // new一个实例对象出来
    const test = new Test()
    console.log(Myinstanceof(test,Test)); //true

失败测试

// 定义一个类
    class Test {}
    // new一个实例对象出来
    const test = new Date()
    console.log(Myinstanceof(test,Test)); //false

结束

至此,整个手写instanceof函数就完毕啦,有什么错误之处希望各位前端大佬指点指点