「一起造轮子」三种写法实现instanceof

本文探讨了JavaScript中的instanceof运算符,详细解释了其实现原理,并提供了三种不同的实现方式:while循环、递归和for循环。通过这些方法,沿着实例对象的原型链查找构造函数属性,直至找到null。此外,还提到了`Object.getPrototypeOf()`作为优化的属性获取方式,但文章中的实现仅限于原型链查找,对于某些特殊情况未做兼容。
摘要由CSDN通过智能技术生成

instanceof的定义是什么?

instanceof在MDN的定义如下:

标准中

实现instanceof过程

如果实例对象(也就是左边传入的值left__proto__不是强等于构造函数(也就是右边传入的值right)的prototype,就一直朝着实例对象的原型链往上找,直到找到null为止,就证明构造函数的prototype属性并没有出现在实例对象的原型链上。

可以结合下方的示意图来理解一下(图片来自于:mollypages.org)

下面的三种写法均基于这个思想:

while循环写法

function myInstanceOf(left, right) {
   
  // 取right的显示原型
  let proto = right.prototype;
  // 取left的隐式原型
  left = left.__proto__;
  while
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值