instanceof
运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
class Person {}
class Studnet extends Person {}
const stu = new Studnet();
console.log(stu instanceof Person); // true
console.log(stu instanceof Object); // true
function myInstanceof(obj, Fun) {
const prototype = Fun.prototype;
let __proto__ = obj.__proto__;
while (true) {
if (!__proto__) return false;
if (__proto__ === prototype) return true;
__proto__ = __proto__.__proto__;
}
}
function myInstanceof2(obj, Fun) {
const prototype = Fun.prototype;
let proto = Object.getPrototypeOf(obj);
while (true) {
if (!proto) return false;
if (proto === prototype) return true;
proto = Object.getPrototypeOf(proto);
}
}
console.log(myInstanceof(stu, Person)); // true
console.log(myInstanceof(stu, Object)); // true
console.log(myInstanceof2(stu, Person)); // true
console.log(myInstanceof2(stu, Object)); // true