instanceof原理--手写代码实现

72 阅读1分钟

手写instanceof

首先写之前要先理解一下instanceof的实现原理:

  • instanceof 主要的实现原理就是只要右边变量的prototype在左边变量的原型链上即可(也就是说左边的变量能在原型链上找到左边变量的prototype)

了解原理之后开始看代码:

 // 声明myInstanceof函数,接受两个参数left, right
    function myInstanceOf(left, right) {
        // 1:声明rightval变量,来得到传入的对象的原型对象
        let rightVal = right.prototype
        // 2:声明leftval变量,来得到传入的对象的原型对象
        let leftVal = left.__proto__
        // 3:循环遍历左边变量的原型链,查找,如果找不到就到一直循环到父类型或祖类型
        while (true) {
            if (leftVal === null) {
                return false
            }
            if (leftVal === rightVal) {
                return true
            }
            leftVal = leftVal.__proto__ // 获取祖类型的__proto__
        }
    }

// 测试用例:
 function Test() { }
 let test = new Test();
 console.log(myInstanceOf(test, Test));

 ------------------
 结果:
 true  
总结:

instanceof在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false.


这里是一个基于hexo搭建的一个博客:nanxiangscholar.github.io/ 欢迎访问!