面试常考点:手写实现一个instanceof

本文详细解析了JavaScript中instanceof操作符的工作原理,通过实例展示了如何利用原型链实现自定义instanceOf函数,并测试了不同对象类型之间的匹配。

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

首先来看几个例子

console.log("111" instanceof Object); //false
console.log({} instanceof Object); //true
console.log([] instanceof Array); //true
console.log(String instanceof String); //false

instanceof 的原理:其实就是判断左边的对象是否在右边对象的原型链上也就是说:left.__proto__ === right.prototype,但是了解过原型链的朋友都知道,原型链的查找是会一层一层去找的,也就是说left.__proto__找不到的话就会去找 left.__proto__.__proto__,直到找到顶层是 null 为止。

function instanceOf(child, parent) {
  let left = child;
  let right = parent.prototype;
  while (true) {
    if (left === null) {//说明已经到原型链顶部了
      return false;
    }
    if (left === right) {
      return true;
    }
    left = left.__proto__;//找不到往上一层找
  }
}

ok,测试一下

console.log(instanceOf({}, Object)); //true
console.log(instanceOf({}, String)); //false
console.log(instanceOf(null, Object)); //false
console.log(instanceOf([], Array)); //true
console.log(instanceOf(String, String)); //false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值