# 手写 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25