instanceof 的定义是什么?
instanceof 在 MDN 的定义如下:
规范中
实现 instanceof 过程
如果实例对象(也就是右边传入的值 left
)__proto__
不是强等于构造函数(也就是左边传入的值 right
)的prototype
,就始终朝着实例对象的原型链往上找,直到找到 null 为止,就证实构造函数的prototype
属性并没有呈现在实例对象的原型链上。
能够联合下方的示意图来了解一下(图片来自于:mollypages.org)
上面的三种写法均基于这个思维:
while 循环写法
function myInstanceOf(left, right) {
// 取 right 的显示原型
let proto = right.prototype;
// 取 left 的隐式原型
left = left.__proto__;
while (true) {if (left === null)
return false;
// 当 proto 严格等于 left 时,返回 true
if (proto === left)
return true;
left = left.__proto__;
}
}
递归写法
function myInstanceof(left, right) {
let proto = left.__proto__;
if (!proto) return false;
return right.prototype === proto ? true : myInstanceof(proto, right)
}
for 循环写法
function myInstanceof(left, right) {
let proto = left.__proto__;
let prototype = right.prototype;
for (;;) {if (proto === null) return false;
if (proto === prototype) return true;
proto = proto.__proto__;
}
}
举荐浏览 & 参考资料
while 循环写法参考自,倡议深刻浏览下方文章
- JavaScript instanceof 运算符深刻分析
for 循环写法参考自
- How to Implement the instanceof in Javascript?
递归写法参考自
- 手动实现 instanceof