A instanceof B
判断 B 的 prototype 属性指向的原型对象(B.prototype)是否在对象 A 的原型链上。
如果在,则为 true;如果不在,则为 false。
function myInstanceof(left, right) {
if (typeof left !== "object" || left == null) return false
let proto = Object.getPrototypeOf(left);
while (true) {
// 找到尽头还没找到
if (proto === null) return false
// 找到之后
if (proto === right.prototype) return true
// 没找到继续找
proto = Object.getPrototypeOf(proto)
}
}
console.log(myInstanceof(undefined, String)); // false
console.log(myInstanceof(new String('aaa'), String)); // true