function myInstanceof(left, right) {
// 判断null if (left == null) return right == null
// 判断基本类型(right为字符串时) if (typeof left !== 'object' && typeof right == 'string') return typeof left == right let proto = Object.getPrototypeOf(left)
// 在原型链上的永远为true while (true) { if (proto == null) return false if (proto == right.prototype) return true proto = Object.getPrototypeOf(proto) }}
console.log(myInstanceof('1', 'string')) // trueconsole.log(myInstanceof('1', 'number')) // falseconsole.log(myInstanceof(1, 'number')) // trueconsole.log(myInstanceof(1, 'string')) // falseconsole.log(myInstanceof({ a: 1 }, Object)) // trueconsole.log(myInstanceof([], Array)) // trueconsole.log(myInstanceof(null, null)) // trueconsole.log(myInstanceof(null, 11)) // falseconsole.log(myInstanceof(1, Number)) // trueconsole.log(myInstanceof('1', String)) // trueconsole.log(myInstanceof(true, Boolean)) // trueconsole.log(myInstanceof(undefined, undefined)) // true
function Person() {}console.log(myInstanceof(new Person, Person)) // true