instanceof是干什么的?
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
只要遍历实例对象的原型,看看是否跟构造函数的prototype相等,即可实现。
function instance_of (obj, Fn) {
// 判断传入的构造函数是不是函数类型
if (typeof Fn !== 'function') {
throw new TypeError('不是函数');
}
// 实例不是对象, 返回false
if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
return false;
}
// 取 Fn的prototype原型比较
let proto = Fn.prototype;
while(obj.__proto__) {
// 当实例的隐式原型__proto__ 全等于 Fn的显式原型 prototype,返回true
if (obj.__proto__ === proto) return true;
// 否则,继续向原型链上游移动
obj = obj.__proto__;
}
return false;
}