2013-10-19 68 views
5

雖然在codecademy.com上通過javascript課程,我已經變得有點困惑。有人可以告訴我區別嗎? javascript oop

所以首先我們已經learnring如何添加方法的類:

function Dog (breed) { 
    this.breed = breed; 
    this.sayHello = function() { 
     console.log("Hello this is a " + this.breed + " dog"); 
    } 
}; 
var someDog = new Dog("golden retriever"); 
someDog.sayHello(); 

然後,我們開始了「原型」。有這樣的例子:

function Dog (breed) { 
    this.breed = breed; 
}; 
Dog.prototype.sayHello = function() { 
    console.log("Hello this is a " + this.breed + " dog"); 
} 
var someDog = new Dog("golden retriever"); 
someDog.sayHello(); 

這兩個例子都給出了相同的結果。 這兩個例子只是兩種做同樣的事情?或者兩者之間有實際區別?

回答

7

區別在於,在第二種情況下,所有實例共享相同的sayHello函數。這樣更有效率,尤其是在創建大量實例的情況下。

+3

接得好!!!!! +1 –

2

原型方法sayHello的由類狗的所有實例共享,而不是與,其中,每個實例創建一個新的副本,浪費時間和空間的構造這添加。

這裏是如何運營工作中的話:

https://gist.github.com/Havvy/5037770

這裏是運營商是如何工作的使用圖片:

enter image description here

相關問題