prototype
: 函数的固有属性,是一个对象,对象中有一个固定属性constructor
指向该函数
__proto__
: Object的固有属性,故所有对象均具有该属性,指向创建该对象的函数的prototype
函数也是对象,那么问题来了,Object/Function/Array/String/Number/Boolean/Date/RegExp/Error的__proto__
指向什么呢?
由于函数是通过new Function()
创建的,那么结果就应该是Function.prototype
Function/Array/String/Number/Boolean/Date/RegExp/Error的prototype
也是个对象,那么它们的__proto__
指向什么呢?
对象是通过new Object()
创建的,那么答案应该是Object.prototype
Object.prototype.__proto__
呢?
这是个特例,指向null
最后说一下instanceof
机制
x instanceof y;
沿着x的__proto__
找是否与y沿着prototype
一致,若一致返回true
,反之为false
Function instanceof Function; // true
Function instanceof Object; // true
以上表达式等价于下图表达式
最后献上一张神图