2013-11-04 111 views
0

讓我介紹與短代碼這個問題,我在這裏:如何init()函數在這種情況下工作

function SomeObject() { 
// Personaly I call this part initialization... 
this.anything = "anything"; 

// ... but here somebody call function init... 
this.init(); 
} 

// ... which is declared there... 
SomeObject.prototype.init = function() { 

// ... and contains more initialization. 

} 

現在問題來了: 這是否執行初始化函數的有什麼好處?

我看到的唯一好處是,您可以稍後使用init函數並重新初始化其某些屬性和其他內容。但是在我的代碼中,沒有這樣做的意義。更重要的是,如果我這樣做,它會打破很多東西。 從那時起,我不知道是否有此實現旁任何區別:

function SomeObject() { 
    init.call(this); 
} 

function init() {   
} 

而且我不知道任何振振有辭爲什麼要構造分成多個部分。所以我認爲(有這種感覺),我真的不得不錯過一些重要的好處或自然。

回答

0

簡短的答案是「OOP」。

在第二種情況下,您必須使用call來提供上下文,並且您沒有提示該函數將用於SomeObject的實例。當然,這個功能並沒有被繼承。

對於像這樣的「私人」功能,它並不重要,特別是如果它僅用於構造函數(那麼,它是一個真正需要的功能?)。但是,如果函數必須從代碼的其他部分使用,將函數附加到必須作爲調用上下文的對象上才能使目標更加清晰。

+0

我可以封裝SomeObject和init與IIF。然後很容易認識到這些屬於一起。那麼你認爲應該避免使用通話嗎?或者你的回答意味着它並不重要,應該逐案解決。 –

+0

如果'init'僅從構造函數中調用,並且沒有其他函數附加到原型,則無關緊要。如果您還有其他功能附加到原型上,那麼添加這個功能可以更容易地識別代碼的結構。這就是說,我不會推薦在JavaScript中過度使用OOP:它往往是冗長的。 –

相關問題