a instanceof A
定义:
实例对象是否和构造函数在一条原型链上
解决的问题: 判断引用类型。基础数据类型不由构造函数创建
原理: 实例对象的隐式原型对象,能否找到构造函数的显示原型对象,如何可以就是对应实例。
原型和 ————proptype什么区别。
构造函数具备propotype属性,是一个指针指向其显示原型。
也就是说平时,自己所写的构造函数.propotype是一个属性. 本质依然是指针。
对象原型(隐式原型)
原型对象(Function.prototype指向的对象)
显示原型(对象)
隐式原型(指针)
弊端
1 基于原型链机制,查找耗时,同时无法判断基础数据类型。无法精确判断对象
let instanceOf = (left, right) => {
//返回对象原型,或者叫隐式原型
let _proto = Object.getPrototypeOf(left);
let Protype = right.prototype
while (true) {
if (_proto === Protype) {
return true
}
// 返回对象原型
_proto = Object.getPrototypeOf(left);
if (_proto === null) {
return false
}
}
}
let test = instanceOf({}, Object)
console.log('test', test)