FAZE CLAN UP! @razzh.cn

instanceof 实现

Aug 18 · 2 min

instanceof 是用于检测对象的原型链上是否与检测函数的 prototype 原型是否是同一引用
那么是不是我在一个对象的 __proto__ 上指向检测函数的 prototype ,那么经过 instanceof 检测之后是否就会返回 true 了呢?那我们来试试:

function mine() {}
mine.prototype.name = 'razzh'
 
var obj = {}
obj.__proto__ = mine.prototype
 
console.log(obj instanceof mine) // true
js

可以看到上述结果返回了 true 证实了这个猜想,接下来就依据它来实现一下 instanceof

#实现

思路:
1、获取检测对象的原型链
2、循环对象的原型链与函数的原型进行全等对比,若符合 if 分支条件则返回 true,反之 false

fucntion _myInstanceof(target, origin) {
  if (typeof target !== 'object') throw Error('target must be Object')
  if (typeof origin !== 'function') throw Error('origin must be origin')
 
  let proto = Object.getPrototypeOf(target) // 相当于 proto = target.__proto__
  while (proto) {
    if (proto === origin.prototype) return true
    proto = Object.getPrototypeOf(proto.prototype)
  }
  return false
}
js
浙ICP备2024129591号-1
screen-logo
戒网 - 村西&王馨悦
--:-- / --:--
  1. 1戒网村西&王馨悦
  2. 2想念梁博
  3. 3Special OneAGA&Eason
  4. 4可惜我是水瓶座杨千嬅&毛不易
  5. 5爱得太迟古巨基&泳儿
  6. 6听你说梁博
  7. 7黄金时代陈奕迅
  8. 8岁月如歌陈奕迅

男:山海半生漂泊 一叶孤舟

女:天地两世零落 几处离愁

男:本是一处同飞鸟 余生无所求

女:空把青丝等白头

男:清泉无垢倒映着 我的心

女:得见青天总在雨打风吹后

男:知我千万头绪烦忧

女:不知谓我何求

男:可否执子之手

女:来抓住我的手

女:管他虚情假意花落水自流

男:知我千万头绪烦忧

女:不知谓我何求

合:待尽扫西风去 乌有

女:寻遍宫阙不见 良人佳偶

男:一夜雨声多少事 月下强说愁

男:功名休问几时成 今朝酒

女:更无一个肯回头

女:如醉方醒原来情钟不自由

女:不知谓我何求

男:世事不如山丘

女:山青不如水秀

男:为何相见恨晚 情深却不寿

男:知我千万头绪烦忧

女:不知谓我何求

男:独立小桥等风满袖

女:去年此门依旧

合:夜灯为君留 归来否