对js原型的一些理解
个人感悟
- 构造器函数的
constructor等于其本身 
1  | console.log(Function.constructor === Function); // true  | 
- 某一构造器的实例,其
constructor指向该构造器(从实例的角度来看可以理解为指向上一级的构造器) 
1  | function foo() {  | 
- 
只有自身能充当构造器的才会有
prototype - 
只要是函数(包括匿名函数)都可以做构造器
 
1  | var fun = new Function();  | 
需要注意的是new Function()直接返回匿名函数对象(而非匿名函数的实例!),所以与直接赋值为匿名函数完全不同(直接赋值匿名函数相当于构造了一个函数对象的实例!):
1  | var fun = function () {  | 
Object实例对象的constructor为[Function: Object]
1  | console.log({}.constructor); // [Function: Object]  | 
- 
只要是原型(
prototype),其constructor必然指向下一级(即若该原型为Object实例对象,其constructor并不会指向[Function: Object]) - 
某个对象原型(
prototype)的constructor等于该对象本身 
1  | var fun = new Function();  | 
- 属性
__proto__指的是上一级构造器的prototype 
1  | var fun = new Function();  | 
从上面的例字可以看出fun的prototye确实是object类型的,但是直接使用construcor并不能得到想要的结果,通过使用属性__proto__就能准确得到上一级构造器的原型!
个人总结
