一行代码实现 instanceof 操作符的原理

215 阅读1分钟
// 实现obj instanceof fn的原理
function newInstanceOf(obj, fn) {
  return (typeof obj === 'object' && obj !== null || typeof obj === 'function') 
  && (typeof fn === 'function') 
  && (obj.__proto__ === fn.prototype || newInstanceOf(obj.__proto__, fn));
}

解释下逻辑:

  1. 校验obj类型是否正确;
  2. 校验fn类型是否正确;
  3. 检查obj.__proto__是否等于fn.prototype,如果不相等,再继续沿原型链向上检查(递归)。

本函数与instanceof操作符的真实结果还是有一点出入:

fn不为function时instanceof会抛TypeError异常,而本函数是返回false。