一、作用
①用于判断某个实例是否属于某构造函数
②在继承关系中用来判断一个实例是否属于它的父类型或者祖先类型的实例
说白了,只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false
二、语法
[对象] instanceof [构造函数]
如:
var obj = new Object()
obj instanceof Object // true
三、涉及的构造函数
基础类型:String、Number、Boolean、Undefined、Null、Symbol
复杂类型:Array,Object
其他类型:Function、RegExp、Date
四、底层原理
function instance_of(L, R) {
var O = R.prototype;
L = L.__proto__;
while (true) {
if (L === null)
return false;
if (O === L)
return true;
L = L.__proto__;
}
}
代码解释:
①L表示对象实例,R表示构造函数或者父类型实例
②取R的显式原型,取L的隐式原型
③循环遍历,进行判断②中的两个值是否相等,相等返回true,不相等继续查找L的原型链
五、未发生继承关系时
function Cat(name,age,type){
this.name = name;
this.age = age;
this.type = type;
}
function Dog(name){
this.name = name;
}
var</