前端面试题 - 115. 实现instanceOf

361 阅读1分钟

在 JavaScript 中,可以使用原型链来实现类似于 instanceOf 的功能。instanceOf 实际上是检查一个对象的原型链中是否存在指定的构造函数。

下面是一个简单的 JavaScript 函数,用于实现 instanceOf:

function myInstanceOf(obj, constructor) {
  // 加上异常处理
  if(['object', 'function'].includes(typeof obj) || obj === null) return false;// 非有效对象\函数
  
  let proto = Object.getPrototypeOf(obj);

  while (proto !== null) {
    if (proto === constructor.prototype) {
      return true;
    }
    proto = Object.getPrototypeOf(proto);
  }

  return false;
}

通过调用 myInstanceOf(obj, constructor) 来检查 obj 是否是 constructor 的实例。例如:

class MyClass {}

const obj = new MyClass();

console.log(myInstanceOf(obj, MyClass)); // true
console.log(myInstanceOf(obj, Array)); // false

let Fn = function () { }
let p1 = new Fn()

console.log(myInstanceOf({}, Object)) // true
console.log(myInstanceOf(p1, Fn)) // true
console.log(myInstanceOf({}, Fn)) // false
console.log(myInstanceOf(null, Fn)) // false
console.log(myInstanceOf(1, Fn)) // false
console.log(myInstanceOf(function a() {}, Function)) // true