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__ 
        }
    }


    原理
  • 相关阅读:
    开源数据汇集工具
    scrapy定时执行抓取任务
    xpath的常见操作
    ubuntu 安装python mysqldb
    sudo: /etc/sudoers is owned by uid 755, should be 0
    ubuntu 14.04安装mysql数据库
    win7 远程桌面连接centos 6.5
    本地启动spark-shell
    ubuntu 安装 2.10.x版本的scala
    unfolding maps支持中文
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/12987429.html
Copyright © 2011-2022 走看看