# 手写 instanceof

instanceof 运算符是通过判断该对象在原型链上是否存在一个构造函数的 prototype 属性,适合检测引用值。

// 手写 instanceof
function myInstanceof(instance, Constructor) {
    // 1. 类型判断
    // 左侧需要为 引用类型
    if (typeof instance !== 'object') {
        throw 'the instance must be object'
    }
    // 右侧需要为函数类型
    if (typeof Constructor !== 'function') {
        throw 'the Constructor must be Function'
    }

    // 2. 原型链匹配
    // 2.1 获取当前实例的原型
    while (instance) {
        // 2.2 判断原型与构造函数的原型对象是否匹配
        if (instance === Constructor.prototype) {
            return true
        }
        // 2.2 原型链上溯
        instance = instance.__proto__
    }

    return false;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
最后更新时间: 9/27/2021, 9:47:48 PM