通过原型链实现instanceof
-
instanceof用法
objInstance instanceof Obj:判断 实例objInstance 是否是 Obj对象类型, 返回值是 true||false
[] instanceof Array // ==> true -
通过在对象的原型链中查找类型的prototype
关于原型的知识点:每个函数都有 prototype 属性,除了Function.prototype.bind(),该属性指向原型
每个对象都有__proto__属性,指向了创建该对象的构造函数的原型
function instanceof(instance, Obj){
// 获取该类型的原型
let prototype = Obj.prototype;
// 通过对象实例的__proto__属性获取对象的原型
let instancePrototype = instance.__proto__;
// 使用while链式查找原型
while(true){
// 当查找到Object,Object.__proto__ === null,说明并未找到对应的对象类型
if(instancePrototype === null)
return false
// 对象的类型等于类型的原型
if(prototype === instancePrototype)
return true
// 链式查找类型的原型
instancePrototype = instancePrototype.__proto__;
}
}

浙公网安备 33010602011771号