2014-03-13 154 views
1

爲什麼第二種模式在第一種情況下使用的次數多於第一種時,他們兩個都是一樣的?或者我錯了?OO JS繼承和原型

function Foo1(){ 
    this.name = "Foo 1"; 
    this.hello = function(){ 
     console.log("hello", this.name); 
    }; 
} 

var test1 = new Foo1(); 
test1.hello(); 



function Foo2(){ 
    this.name = "Foo 2"; 
} 

Foo2.prototype.hello = function(){ 
    console.log("hello", this.name); 
}; 

var test2 = new Foo2(); 
test2.hello(); 
+0

首先爲每個實例創建一個匿名函數,而第二個爲每個原型創建一個。 – zerkms

+1

第二種方法允許在現有和新實例上替換* hello *方法。在第一個示例中更改* hello *只會更改新實例的方法(即更改後創建的方法)。 – RobG

+0

@ zerkms - 該函數在創建時可能是「匿名的」,但是一旦賦值給變量,它是否比通過函數聲明創建的匿名更具匿名性? ;-) – RobG

回答

2

物體佔用這種方式的內存較少。在一個類中只需要一個函數,而不是每個實例的一個函數。這也反映了經典的繼承。