instanceof 实现

// 实现一个instanceof
/**
* 先说一下instenceOf是干什么的
* 用法 leftValue instanceof rightValue 返回boolean值
*
* 原理:查找右侧对象是否在左侧对象的原型链上
* 需要注意 左侧必须为对象
*
* 实现原理:在左侧值的原型链上一直找下去 直到找到右侧对象的原型,或者一直到null为止
*
* 开始之前为了更好的理解我先说一下原型链
*
* 构造函数 --- new --> 实例化对象 --- __proto__ --> 构造函数.prototype --- constructor ---> 构造函数
*
*
*/

    // 例如:
    function Animal(){}
    let cat = new Animal()
    console.log(cat instanceof Animal)
    console.log(cat.__proto__ == Animal.prototype)
    console.log(Animal == Animal.prototype.constructor)
image.png

//简单介绍了一下原型链 接下里我们开始通过原型链的原理来实现instanceof

    function myInstanceOf(leftValue,rightValue){
        //如果左侧值 leftValue不是对象 或者为null 直接返回false
        if(typeof leftValue !== "object"|| leftValue === null){
            return false
        }
        let proto = leftValue.__proto__
        let prototype = rightValue.prototype
        //一直沿着原型链找下去 知道有结果
        while(true){
            //一直找到对象的根null还没有找到右侧对象 返回false
            if(proto === null){
                return false
            }
            //在原型链中找到了
            if(proto === prototype){
                return true
            }
            // 重新赋值proto 继续往上找
            proto = prototype.prototype
        }
    }

    console.log('测试结果--'+myInstanceOf(cat,Animal)) //true

欢迎吐槽or点赞!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容