手写instanceof
instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car("honda", "accord", 1998);
console.log(auto instanceof Car);
console.log(auto instanceof Object);
console.log(Car instanceof Object);
console.log(Car instanceof Function);
console.log(auto instanceof Function);
function myInstanceOf(obj, source) {
if (obj == null) return false;
if (typeof obj === "object" || typeof obj === "function") {
let proto = Object.getPrototypeOf(obj);
while (proto) {
if (proto === source.prototype) return true;
proto = Object.getPrototypeOf(proto);
}
}
return false;
}
console.log("------------华丽的分割线-------------");
console.log(myInstanceOf(auto, Car));
console.log(myInstanceOf(auto, Object));
console.log(myInstanceOf(Car, Object));
console.log(myInstanceOf(Car, Function));
console.log(myInstanceOf(auto, Function));