手动实现instanceof

instanceof
  1. instanceof作用是正确判断对象的类型,机制是通过内部的原型链,即构造函数的prototype和实例的__proto__是否相等比较

    思路:判断{} instanceof Object左右两边的类型是否是严格相等的

    // 该方法只适用于判断对象类型,对于基础数据类型不适合
    function myInstanceof(left, right) {
        // 获得构造函数的原型对象prototype
        let rightPrototype = right.prototype
        // 获得实例对象的原型
        left = left.__proto__
        // 判断构造函数的原型对象是否等于实例对象的原型
        while (true) {
        	if (left === null)
        		return false
        	if (rightPrototype === left)
        		return true
         // 往上层的原型链查找   
        	left = left.__proto__
        }
    }
    
    // 使用
    console.log(myInstanceof([],Object))
    // 第一次left = [].__proto__,因为[].__proto__.constructor === ƒ Array(),所以走往上层的原型链查找left = left.__proto__,这时left = [].__proto__.__proto__
    // 第二次left = [].__proto__.__proto__,因为[].__proto__.__proto__.constructor === ƒ Object(),所以return true
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值