instanceof
-
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