# 实现 instanceof
# instanceof 语法
object instanceof constructor
// 等同于
constructor.prototype.isPrototypeOf(object)
- object: 要检测的对象
- constructor: 某个构造函数
# instanceof 的实现
function instanceof(L, R) {
const O = R.prototype
L = L.__proto__
while (true) {
if (L === null) {
return false
}
if (L === O) {
return true
}
L = L.__proto__
}
}
instanceof 原理: 检测 constructor.prototype 是否存在于参数 object 的原型链上。 instanceof 查找的过程中会遍历 object 的原型链,直到找到 constructor 的 prototype ,如果查找失败,则会返回 false,表示 object 并非是 constructor 的实例。
# Symbol.hasInstance
对象的 Symbol.hasInstance 属性,指向一个内部方法。当其他对象使用 instanceof 运算符,判断是否为该对象的实例时,会调用这个方法。比如,foo instanceof Foo 在语言内部,实际调用的是 FooSymbol.hasInstance。
class MyClass {
[Symbol.hasInstance](foo) {
return foo instanceof Array
}
}
;[1, 2, 3] instanceof new MyClass() // true
← 实现 new 实现 compose 函数 →