2012-10-01 18 views
0

可能重複:
Use of 'prototype' vs. 'this' in Javascript?正確的模式:本或原型

如果我有一個目標函數,什麼時候應該使用this.something代替func.prototype.something

只是爲了澄清:代替

function Person() 
{ 
    this.walk=function(){...}; 
} 

function Person() 
{} 
Person.prototype.walk=function(){...}; 

當是方便使用一種形式,而不是其他的?這兩種解決方案的優點和缺點是什麼?特別是在我總是使用的情況下var person = new Person();

+1

這是類似於這個問題:http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript?rq=1 – 2012-10-01 20:20:08

+0

@優雅是正確的,但我沒有得到在我使用新人的情況下,究竟有什麼區別() –

+0

@Leigh ok這個回覆http://stackoverflow.com/a/310927/566608也在回覆我,所以我也投票結束了這個問題。 –

回答

1

如果您需要使用此功能,您需要使用prototype。另請參閱this stackoverflow後。

4

這兩段代碼真的很不一樣,並且實現了不同的目標。

第一個示例涉及一個函數,該函數在調用時將一個屬性添加到接收者對象(this引用的對象),或者更新該屬性的值(如果它已經存在)。因此,用不同的接收者調用該「Person」函數將分別更新這些對象,每個對象都獲得一個名爲「walk」的屬性。如果使用「Person」作爲構造函數,那麼新創建的對象將被類似地直接更新。

第二個示例將方法添加到原型函數的對象中。當該函數隨後調用new時,生成的新對象將繼承原型對象的屬性。這意味着這些對象可以被視爲它們實際上有一個名爲「walk」的屬性,這是一個可調用的函數。然而,該屬性並不直接存在於每個構造的對象上。它是可見的,因爲原型對象在JavaScript屬性查找中扮演的角色。

+0

描述得比我好得多。 +1。 –