手动实现instanceof函数

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)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值