zoukankan      html  css  js  c++  java
  • 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__ 
        }
    }


    原理
  • 相关阅读:
    构建之法8,9,10章
    作业6
    通过处理器类型获得处理器对象
    面经
    C语言实现字符串替换
    计算机网络整理
    常见面试题
    数据库常见面试题
    redis常见知识整理
    项目总结
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/12987429.html
Copyright © 2011-2022 走看看