// 实现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));
}
复制代码
解释下逻辑:
- 校验obj类型是否正确;
- 校验fn类型是否正确;
- 检查obj.__proto__是否等于fn.prototype,如果不相等,再继续沿原型链向上检查(递归)。
本函数与instanceof操作符的真实结果还是有一点出入:
fn不为function时instanceof会抛TypeError异常,而本函数是返回false。