instanceof操作符用于判断构造函数的prototype属性是否出现在对象的原型链中的任何位置。
function Person(name) {
this.name = name
}
let obj = new Person("张三");
//打印obj的原型
console.log("Object.getPrototypeOf(obj)", Object.getPrototypeOf(obj));
//打印构造函数的原型
console.log("Person.prototype", Person.prototype);
console.log(Object.getPrototypeOf(obj) === Person.prototype);//true
console.log(obj instanceof Person);//true
console.log(obj instanceof Object);//true
实现原理的代码:
/实现原理
function instance(left, right) {
//1、获取对象的原型
let proto = Object.getPrototypeOf(left);
//2、获取构造函数的prototype属性
let prototype = right.prototype;
while (true) {
if (!proto) {//proto===null
return false
}
//隐式原型和显示原型相等,说明找到了
if (proto === prototype) {
return true
}
//如果没有找到,就继续在上一层原型链上找
proto = Object.getPrototypeOf(proto)
}
}