instanceof检测的原理和简单实现
instanceof
instanceof就是通过判断左边对象的原型琏中是否存在右边构造函数的prototype来判断类型, a instanceof b,就是判断a的原型琏上是否有b.prototype
基本类型的构造函数有Number,Boolean,String,Null,Undefined,Symbol
复杂类型的构造函数有Object,Array,Function,RegExp,Date..
注意
instanceof的左边数据必须是对象类型,如果是基本类型是一定返回false的,就像下面这种情况,通过new后num不再是基本类型
let num = 1
num.__proto__ === Number.prototype // true
num instanceof Number // false
num = new Number(1)
num.__proto__ === Number.prototype // true
num instanceof Number // true
原理
instanceof原理是通过判断右边变量的prototype在左边变量的原型琏上,在就为true,不再为false
简单实现
function myInstanceof(leftVaule, rightVaule) {
let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值
leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值
while (true) {
if (leftVaule === null) {
return false;
}
if (leftVaule === rightProto) {
return true;
}
leftVaule = leftVaule.__proto__
}
}
原理
开源中国博客地址:https://my.oschina.net/u/2998098/blog/1540520