instanceof的实现原理浅析及手写instanceof的实现

一. 类型判断。

众所周知,在JavaScript中,检测一个变量的类型,无疑有以下三种方法。当然,本文会略过前两种,重点讲述instanceof实现原理手写instanceof的实现。

  • typeof法

 

  • Object.prototype.toString.call()

  • instanceof

二. instanceof 的实现原理。

  • 官方:

instanceof 运算符用于测试构造函数prototype 属性是否出现在对象原型链中的任何位置。

  • 白话文:

如果 a instanceof B ,那么 a 必须要是个对象,而 B 必须是一个合法的函数。在这两个条件都满足的情况下:判断 B 的 prototype 属性指向的原型对象B.prototype )是否在对象 a原型链上。如果在,则返回true;如果不在,则返回false。简而言之, instanceof 的原理其实就是一个查找原型链的过程

三. 手写 instanceof 的实现。

function myInstanceof(left,right){
        //获取(构造)函数的(显式)原型
        let rp = right.prototype;
        //获取对象的(隐式)原型
        left = left.__proto__;
        //判断对象的(隐式)原型是否等于(构造)函数的(显式)原型
        while(true){
          if(left === null){
            return false
          }
          if(left === rp){
            return true
          }
          left = left.__proto__
        }
      }

      let a = /12/;
      let b = '123';
      console.log(a instanceof RegExp,myInstanceof(a,RegExp));  //true,true
      console.log(b instanceof RegExp,myInstanceof(b,RegExp));  //false,false

猜你喜欢

转载自blog.csdn.net/Yi2008yi/article/details/124102143