instanceof
用来检测某个实例对象的原型链上是否存在构造函数的prototype属性
手写instanceof
原理:原型链的向上查找
function myInstanceof(L, R) {
// 基本数据类型直接返回false
if (typeof L !== 'object' || L === null) return false
//getProtypeOf是Object对象自带的一个方法,能够拿到参数的原型对象
let proto = Object.getPrototypeOf(L)
while (true) {
// 查找到尽头还没找到
if (proto === null) return false
// 找到相同的原型对象
if (proto === R.prototype) return true
proto = Object.getPrototypeOf(proto)
}
}
console.log(myInstanceof("111", String)); //false
console.log(myInstanceof(new String("111"), String));//true
判断引用类型更好的方法
let arr = [1,2]
console.log(Object.prototype.toString.call(arr) === '[object Array]') // true
console.log(arr instanceof Array) // true
console.log(arr instanceof Object) // true