function myInstanceof(left, right) {
let proto = Object.getPrototypeOf(left)
let prototype = right.prototype;
while (true) {
if (!proto) return false;
if (proto === prototype) return true;
proto = Object.getPrototypeOf(proto);
}
}
注:
1、left myInstanceof right 相当于myInstanceof(left, right)
2、Object.getPrototypeOf和Object.prototype区别?
Object 本身是一個 函数,Object.prototype 不是 Object 這一对象的原型,而是 Obejct 這一函数的 函数原型,也就是 new Object() 的原型。
而 Object.getPrototypeOf(Object) 是把 Object 這一函数看作对象,返回的是 函数对象 的 原型,也就是 Function.prototype 即 function Empty() {} 了。