创建一个函数 function f1(){
//。。。。。
}
首先每个函数f1都有一个自带的原型属性prototype,这个原型又是一个对象 , 他有自己一个唯一的constructor的属性指向自身,当然也可以定义很多原型属性用来写插件之类,这句话相对下面的每个prototype
其次每个函数f1还有一个自带的隐式原型属性__proto__ 这个也是一个对象,他继承于创建这个函数的原型,既Function.prototype, f1.__proto===Function.prototype,
当然函数f1自带的原型prototype自己也有一个__proto__的属性,指向Object.prototype, f1.prototype.__proto__===Object.prototype,
当然构造函数Object的prototype也有一个__proto__属性指向谁呢?null
然后Function也有一个__proto__的属性,它指向谁呢?它指向他自身的prototype 很叼吧 循环来的
这样看来大概就清楚一点了,首先自定义对象都是被Object创建的 不过相对于直接创建自定义函数少了一个Function的步骤 所以如果是自定义一个对象的话
var f2={... } f1.__proto__===Object.prototype,
函数的话f1.__proto__===Function.prototype, Function.prototype.__proto__===Object.prototype,
全文都围绕一句话来表达:对象的__proto__指向的是创建它的函数的prototype