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