前置
instanceof
关键字会判断右侧的构造函数的 prototype
属性是否出现在左侧实例对象的原型链上
所有对象都具有__proto__
属性,它会指向创建它的构造函数的prototype
属性
MDN鼓励使用getPrototypeOf 来代替 proto 的属性访问
要求
obj
可以是任意参数,即它也可能是null
和undefined
题解
var checkIfInstanceOf = function (obj, classFunction) {
if (obj === null || obj === undefined || !(classFunction instanceof Function))
return false;
// 拿到对象的原型
let objProto = Object.getPrototypeOf(obj);
// 如果 当前原型往上查找 还是不等于 prototype原型 则继续查找
while (objProto !== classFunction.prototype) {
objProto = Object.getPrototypeOf(objProto);
}
return objProto === classFunction.prototype;
};