// 实现一个instanceof
/**
* 先说一下instenceOf是干什么的
* 用法 leftValue instanceof rightValue 返回boolean值
*
* 原理:查找右侧对象是否在左侧对象的原型链上
* 需要注意 左侧必须为对象
*
* 实现原理:在左侧值的原型链上一直找下去 直到找到右侧对象的原型,或者一直到null为止
*
* 开始之前为了更好的理解我先说一下原型链
*
* 构造函数 --- new --> 实例化对象 --- __proto__ --> 构造函数.prototype --- constructor ---> 构造函数
*
*
*/
// 例如:
function Animal(){}
let cat = new Animal()
console.log(cat instanceof Animal)
console.log(cat.__proto__ == Animal.prototype)
console.log(Animal == Animal.prototype.constructor)
//简单介绍了一下原型链 接下里我们开始通过原型链的原理来实现instanceof
function myInstanceOf(leftValue,rightValue){
//如果左侧值 leftValue不是对象 或者为null 直接返回false
if(typeof leftValue !== "object"|| leftValue === null){
return false
}
let proto = leftValue.__proto__
let prototype = rightValue.prototype
//一直沿着原型链找下去 知道有结果
while(true){
//一直找到对象的根null还没有找到右侧对象 返回false
if(proto === null){
return false
}
//在原型链中找到了
if(proto === prototype){
return true
}
// 重新赋值proto 继续往上找
proto = prototype.prototype
}
}
console.log('测试结果--'+myInstanceOf(cat,Animal)) //true
欢迎吐槽or点赞!