先回顾一下 instanceof 的用法:
Function instanceof Object; // true
[1,2,3] instanceof Array; // true
其中的原理是什么呢?
JS 是基于原型链面向对象的语言,上述例子中的Function、[1,2,3]就是基于Object、Arraynew出来的实例。在Function、[1,2,3]的属性中有一个__proto__属性指向其原型的prtotype属性;该属性包括了此原型所能被继承的所有方法。
在原型的prototype属性中,有一个constructor属性自己的构造器。
回到 instanceof 上,从上叙述中既可以推断出 instanceof 的原理:
[1,2,3] instanceof Array <=> [1,2,3].__proto__.constructor === Array