手动实现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
    

猜你喜欢

转载自blog.csdn.net/YMX2020/article/details/106220721