手动实现instanceof函数

本文详细解析了instanceof操作符的功能及其实现原理,通过实例展示了如何检查一个对象是否出现在另一个对象的原型链上,并提供了两种手动实现instanceof的方法。

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

instanceof 功能

a instanceof b 官方解释为检查构造函数b的prototype 有没有出现在a的原型链上。比如:

function A() {
}

function B() { }
function C() { }

//B继承A
B.prototype = new A()

let instance = new B()

console.log('---instance instanceof B-----', instance instanceof B) //true
console.log('---instance instanceof A-----', instance instanceof A) //true

手动实现

既然知道了instanceof的原理,就可以写一个函数来实现这个功能。实现过程中会用到以下两个函数中的一个。
getPrototypeOf:获取某个实例对象的原型;
isPrototypeOf:检测某一个对象是否存在于另一个对象的原型链上;

基于getPrototypeOf实现的函数为:

function isInstanceOf(target1, target2) {
  let proto = Object.getPrototypeOf(target1)
  if(!proto){return false}
  if (proto === target2.prototype) { return true }
  //递归去原型链上找
  return isInstanceOf(proto, target2)
}

基于isPrototypeOf实现的函数为:

function isInstanceOf(target1, target2) {
  return target2.prototypeis.isPrototypeOf(target1)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值