手动实现instanceof

113 阅读1分钟
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