instanceof:用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上

    1. function myInstanceof(target, origin) {
    2. // 先判断target
    3. if (
    4. (typeof target !== 'function' && typeof target !== 'object') ||
    5. target === null
    6. )
    7. return false
    8. if (typeof origin !== 'function')
    9. throw new TypeError('origin must be a function')
    10. let proto = Object.getPrototypeOf(target) // proto === target.__proto__
    11. while (proto) {
    12. if (proto === origin.prototype) return true
    13. // 按原型链查找
    14. proto = Object.getPrototypeOf(proto)
    15. }
    16. return false
    17. }
    18. function foo() {}
    19. console.log(myInstanceof(foo, Object))
    20. console.log(foo instanceof Object)