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