Skip to content

Latest commit

 

History

History
40 lines (29 loc) · 848 Bytes

instanceOf.md

File metadata and controls

40 lines (29 loc) · 848 Bytes

instanceOf实现

描述

由于instanceof是JS关键字,所以无法直接模拟,可以写一个instanceOf函数,接收2个参数,分别是对象和类。如:

function Person (name) {
  this.name = name;
}

let p = new Person('Orange');
console.log(instanceOf(p, Person)); // 打印 true

实现

步骤:

  1. 如果第一个参数是非null且非对象或非函数的情况则直接返回false;
  2. 循环判断原型是否在func.prototype上;
  3. 若找到则返回true,没找到则返回false。
const instanceOf = (obj, func) => {
  if (!(obj && ['object', 'function'].includes(typeof obj))) {
    return false
  }

  let proto = obj;

  while (proto = Object.getPrototypeOf(proto)) {
    if (proto === func.prototype) {
      return true;
    }
  }

  return false;
}