/**
 * 在instanceof的底层原理是,利用instanceof左边实例的隐式原型和instanceof右边构造函数的显示原型进行循环比对。
 * 看看是否有哪一级能对上。有对的上的就返回true,一直顺着原型链找到头都没有比对成功的,返回false。
 * @param {*} el 
 * @param {*} type 
 */
const myInstance = (el, type) => {
  // 获取右边构造函数的显式原型
  const typeProto = type.prototype

  while(true) {
    // 如果隐式原型为null,说明已经查找到头了,依然没找到,说明类型不匹配,返回false
    if (el.__proto__ === null) return false
    // 如果数据的隐式原型和类型的显式原型重叠,则说明类型匹配,返回true
    if (el.__proto__ === typeProto) return true
    // 当前原型链层不为null也没有匹配,则去下一层匹配
    el = el.__proto__
  }
}