返回

实例of:用JavaScript的手写实现

前端

踏上原型链的奥秘之旅

原型链是JavaScript中最神秘、最令人惊叹的概念之一。它将对象连接起来,形成一个由祖先和后代组成的庞大网络。当我们访问一个对象的属性或方法时,JavaScript会沿着原型链向上查找,直到找到该属性或方法的定义。

剖析 Object.getPrototypeOf() 方法

Object.getPrototypeOf() 方法是揭开原型链奥秘的钥匙。它接受一个对象作为参数,并返回该对象的原型。原型是一个特殊的对象,它包含了对象的共享属性和方法。

用 JavaScript 手写实现 instanceof

现在,我们已经掌握了原型链和 Object.getPrototypeOf() 方法的知识,就可以开始动手实现我们的 instanceof 了。

function myInstanceof(obj, constructor) {
  while (obj) {
    if (obj === constructor.prototype) {
      return true;
    }
    obj = Object.getPrototypeOf(obj);
  }
  return false;
}

让我们来剖析一下这段代码:

  • myInstanceof() 函数接受两个参数:obj 和 constructor。obj 是我们要检查的对象,constructor 是我们要检查的对象的构造函数。
  • while (obj) 循环不断地向上查找 obj 的原型链,直到 obj 为 null。
  • 在循环中,我们检查 obj 是否等于 constructor.prototype。如果相等,则说明 obj 是 constructor 的实例,我们返回 true。
  • 如果 obj 不等于 constructor.prototype,则我们将 obj 的原型赋值给 obj,并继续循环。
  • 如果循环结束时 obj 为 null,则说明 obj 不是 constructor 的实例,我们返回 false。

自定义 instanceof 的妙用

我们自定义的 instanceof 不仅可以像原生 instanceof 那样用于类型检查,还可以用于其他场景,比如:

  • 检查一个对象是否具有某个属性或方法。
  • 检查一个对象是否属于某个类。
  • 检查一个对象是否实现了某个接口。

扬帆起航,探索 JavaScript 的奥秘

恭喜你,你已经掌握了 instanceof 的奥秘,并且能够用 JavaScript 手写实现它。这只是 JavaScript 旅程的开始,还有更多的奥秘等待着你去探索。希望这篇文章能够激发你对 JavaScript 的热情,并帮助你在编程的道路上不断前行。