返回
实例of:用JavaScript的手写实现
前端
2023-10-28 18:07:37
踏上原型链的奥秘之旅
原型链是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 的热情,并帮助你在编程的道路上不断前行。