2015-06-22 100 views
0

使用prototype創建方法並在函數內部創建方法之間的區別是什麼?例如,methodOnemethodTwo之間有什麼區別?Javascript原型方法與內部方法

function myFunc() { 
    this.methodOne = function() { console.log("First method.")}; 
} 

myFunc.prototype.methodTwo = function() { console.log("Second method.")}; 

他們似乎有同樣的表現方式:

var myFuncInstance = new myFunc(); 
myFuncInstance.methodOne(); 
myFuncInstance.methodTwo(); 

但我的感覺是,methodTwo,通過訪問prototype直接,做的東西有點不同。

回答

1

所不同的是,myFuncmethodTwo相同的單實例,但有自己的methodOne實例的每個實例。

I.e.

var foo = new myFunc(); 
var bar = new myFunc(); 
foo.methodOne === bar.methodOne; // false 
foo.methodTwo === bar.methodTwo; // true 

採取這種遠一點,如果要創建1000種myFunc情況下,要創建1000個methodOne功能,所有做同樣的事情。仍然只有一個methodTwo函數。

1

使用.prototype語法可以將方法添加到現有對象。例如,你可以添加一個求和方法使用

Array.prototype.sum =函數(){...}

然後用它作爲

VAR一個= [1,2陣列型,3]然後執行a.sum()

使用.prototype,您可以繼續根據您的需求進行擴展,就像在基於類的語言中一樣。

+0

雖然你說的是正確的,但它並沒有真正回答這個問題。 –