instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

class Person {}

class Studnet extends Person {}

const stu = new Studnet();

console.log(stu instanceof Person); // true
console.log(stu instanceof Object); // true
function myInstanceof(obj, Fun) {
  const prototype = Fun.prototype;
  let __proto__ = obj.__proto__;

  while (true) {
    if (!__proto__) return false;
    if (__proto__ === prototype) return true;

    __proto__ = __proto__.__proto__;
  }
}

function myInstanceof2(obj, Fun) {
  const prototype = Fun.prototype;
  let proto = Object.getPrototypeOf(obj);

  while (true) {
    if (!proto) return false;
    if (proto === prototype) return true;

    proto = Object.getPrototypeOf(proto);
  }
}

console.log(myInstanceof(stu, Person)); // true
console.log(myInstanceof(stu, Object)); // true

console.log(myInstanceof2(stu, Person)); // true
console.log(myInstanceof2(stu, Object)); // true
最后修改:2022 年 08 月 11 日 11 : 40 AM
如果觉得我的文章对你有用,请随意赞赏