手動實現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)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章