1. 所有函数都是对象,和其他对象区别在于有一个内部成员 [[call]],你调用函数的时候其实就是调用这个成员
2. 所以函数上可以挂任何成员,prototype 是其中之一,一般会挂上一个对象,这时候就叫prototype 原型对象(所以问题一是这是一样的)
3. 当你调用 new FuncA() 的时候,其实做了这些事情
a. 生成一个空对象 {}
b. 设置这个空对象的内部成员 [[prototype]] 为 FuncA.prototype ,这个内部成员在v8中是可以访问的__proto__
c. 以这个空对象为 this 调用 FuncA, 即 FuncA.call(this, xxx)
4. 至于 FuncA.prototype.constructor, 对于一个函数的缺省 prototype来说就是函数本身,即
FuncA.prototype.constructor === FuncA
不过这个其实几乎没有任何用处,你大可忽视这个东西。
盗张图:
http://www.codeproject.com/KB/scripting/687093/PrototypeGraph.png