直接看这样一个例子。
var XXX = function(){}; var p = new XXX();
可以把上面的例子拆分为如下一个过程:
var p={}; //初始化一个对象p p.__proto__ = XXX.prototype;//__proto__是实例的属性,prototype是函数模板的属性 XXX.call(p); //将Person对象成员劫持给p
这样很清晰的就可以看出__proto__是对象实例的属性,而prototype是函数模板的属性;千万不要在实例的对象中在去寻找或者复写prototype属性啦,它根本就没有这东西!!!
很多人在此有所混淆。