http://www.cnblogs.com/wbin91/p/5265163.html
先上代码
function(y) Foo{ this.y = y;}
Foo.prototype.x = 10;
Foo.prototype.calculate = function(z){return this.x + this.y + z;};
var b = new Foo(20);
var c = new Foo(30);
对于JavaScript
中的prototype
和__proto__
网上已经有很多很好的讲解了, 比如 JavaScript中__proto__与prototype的关系, MDN proto, MDN prototype.
这里做一下总结, prototype
是所有函数都有的属性, 表示这个函数作为构造函数时, 创建的对象的__proto__
属性. __proto__
是对象的[[Prototype]]
属性(函数也是对象), 表示对象从原型链中继承下来的属性, 关于继承和原型链可参考 MDN 文档. (在prototype
中定义的属性, 能够被所有该类型的对象共享, 对prototype
的修改会影响到所有该类型的对象, 同样我们可以通过prototype
来减少内存的占用. 由于原型链会一直递归查询到Object.prototype.__proto__
, 因此一个复杂的类型系统可能会影响到性能(每次访问属性都会查询到原型链顶), 解决方法是必要是打断原型链.)
参考文献
keep learning