JavaScript开发:实现instanceof和typeof的原理,手把手教你模拟实现!

17 min read

typeof是一个运算符,用于确定变量的基本数据类型,例如字符串、数字、布尔值、函数等。

instanceof是一个操作符,用于确定一个对象是否属于一个特定的类或构造函数的实例。它的实现原理是判断一个对象是否是通过一个构造函数创建出来的。具体实现方式是通过判断对象的__proto__属性是否等于构造函数的prototype属性。

以下是模拟实现一个instanceof的示例代码:

function myInstanceof(obj, Constructor) {
  // 首先获取构造函数的prototype对象
  let prototype = Constructor.prototype;
  // 然后获取对象的原型
  let proto = obj.__proto__;
  // 循环判断对象的原型链是否等于构造函数的prototype对象
  while (true) {
    if (proto === null) {
      // 如果原型链已经到达顶端,返回false
      return false;
    }
    if (proto === prototype) {
      // 如果对象的原型链上存在构造函数的prototype对象,返回true
      return true;
    }
    // 继续向上查找原型链
    proto = proto.__proto__;
  }
}

使用示例:

function Person() {}
const person = new Person();

console.log(myInstanceof(person, Person)); // true
console.log(myInstanceof(person, Object)); // true
console.log(myInstanceof(person, Date)); // false