instanceof
前置知识
- 每个函数都有prototype属性,指向其原型;
- 每个对象都有隐式属性[[prototype]]指向该对象的原型, 但该属性为内部属性,无法直接访问,所以通过__proto__属性访问;
作用
用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
语法
object instanceof constructor
参数:
- object: 某个实例对象;
- constructor: 某个构造函数;
模拟实现
实现步骤:
- 接收目标对象和目标构造函数
- 递归原型链上查找目标构造函数的原型
- 若目标对象原型链上找到目标构造函数的原型,返回true;若找到原型链的终端(null)依旧未找到,则返回false;
function instanceOf(obj, target) {
let prototype = obj.__proto__
while(true) {
if(!prototype) return false
if(prototype === target.prototype) return true
prototype = prototype.__proto__
}
}