instanceof
能够正确地判断对象的类型的原理是:通过判断对象的原型链中是不是能找到类型的prototype
。
我们可以来试着实现一下instanceof
:
function myInstanceof(left, right) { // 获取类型的原型 let prototype = right.prototype // 获取对象的原型 left = left.__proto__ while (true) { if (left === null || left === undefined) { return false } if (prototype === left) { return true } left = left.__proto__ } }
while(true)
这段代码意思是,一直循环判断对象的原型是否等于类型的原型,直到对象原型为null
(因为原型链终点是null
)