在Javascript語言中,new命令後面跟的不是類,而是構造函數。javascript
舉個例子,如今有一個叫作CAT的構造函數,表示貓對象的原型。java
function CAT(name){ this.name = name; this.age = 3; }
當咱們new這個構造函數的時候,就會生成一個貓對象的實例。函數
var Tom = new CAT('Tom'); var Jack = new CAT('Jack'); Tom.age = 5; alert(Tom.name+','+Tom.age); //Tom,5 alert(Jack.name+','+Jack.age); //Jack,3 不受Tom的影響
可是經過上面的例子你會發現:用構造函數生成實例對象,它有一個缺點,那就是沒法共享屬性和方法。this
由於這兩個對象的age屬性是獨立的,修改其中一個,不會影響到另外一個。prototype
這樣作的壞處就是會形成資源浪費,那麼咱們要如何來解決這件事呢,那就須要prototype出場了。code
這個屬性包含一個對象(如下簡稱"prototype對象"),全部實例對象須要共享的屬性和方法,都放在這個對象裏面;那些不須要共享的屬性和方法,就放在構造函數裏面。對象
CAT的代碼利用prototype就能夠改寫成這樣子了: function CAT(name){ this.name = name; } CAT.prototype.age = 3; var Tom = new CAT('Tom'); var Jack = new CAT('Jack'); CAT.prototype.age = 5; alert(Tom.name+','+Tom.age); //Tom,5 alert(Jack.name+','+Jack.age); //Jack,5
age屬性放在prototype對象裏,是兩個實例對象共享的。只要修改了prototype對象,就會同時影響到兩個實例對象。ip