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

本文探讨了JavaScript中检测变量类型的三种方法,重点关注了instanceof运算符的工作原理。instanceof用来检查对象的原型链是否包含指定构造函数的prototype属性。文章通过白话解释和代码示例详细阐述了instanceof的实现过程,并提供了手写instanceof的函数,帮助读者更好地理解和应用这一概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 类型判断。

众所周知,在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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值