instanceof
MDN的解释:instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
可用于检测引用类型数据的数据类型。
A instanceof B:意思就是检测A(实例)是不是B(构造函数)的实例。
返回值为布尔类型:true表示A是B的实例,false则不是。
那么它判断原理是什么呢?
首先知道,每个实例都存在一个__proto__属性,该属性指向创建它的构造函数的prototype属性指向的对象。
然后每个构造函数都有一个属性prototype属性,该属性指向一个空对象(这里的空对象意思是我们本身没有通过代码往里添加属性,并不是没有任何属性。)
看代码:
{
function Person() {
this.name = "Tom";
}
let pp = new Person();
console.log(pp instanceof Person);//返回true
}
再看图:
上图就是Person构造函数、实例pp的原型链关系。
pp instanceof Person 这一句含义:
就是去查原型链:判断Person的prototype属性在不在pp实例的原型链上。
通过代码可以证明:console.log(pp instanceof Object);//返回true,因为看原型链的图,Object的prototype属性在pp的原型链上,所以返回true。