2010-12-14 28 views
3

我正在重新檢查我的很多代碼,並且一直回到「我應該將所有JS類加入到哪個模式?」這個問題。您使用哪些Javascript編程模式?

一些示例模式: http://www.klauskomenda.com/code/javascript-programming-patterns/

我結束了混合式的方式,與基本的pub/sub功能。我不使用原型或模塊模式,我在構造函數中定義了公共/私有屬性/方法。

例如:

function ClassName(){ 
    var _privateVar = 'private'; 
    this.publicVar = 'public'; 
    function _privateMethod(){}; 
    this.publicMethod = function(){}; 
} 

你經常在JS使用什麼樣的模式?出於什麼目的?常規網站?完整的網絡應用?是什麼讓你選擇了另一種模式?

或者你認爲它比我想象的要少嗎?

在此先感謝。

編輯:好吧,我使用原型,只是不定義我所有的方法。但是由於表現,我傾向於這種方式?思考?

+3

也許這個問題更適合programmers.stackexchange.com – Keyo 2010-12-14 22:53:36

+1

我認爲它很重要小於我認爲它確實如此。 :p – Stephen 2010-12-14 23:13:25

回答

2

有些事情要考慮

界定公共職能與內部功能,因爲您生成一個對象的每個實例化一個新的功能更加昂貴。在原型上定義它使用方法的單個副本。

爲了清楚起見,我總是對私有方法/屬性使用下劃線。

我也使用模塊模式來定義類中的靜態私有方法。由於他們不需要訪問實例,因此只創建一次。

+0

+1。對於少數對象實例來說它可能是最小的,但我不能相信它顯然被忽視的頻率,並且私有成員/方法被高估。 – 2010-12-15 02:55:16

+0

我不認爲私人會員被高估。不過,我認爲一個很好的折衷辦法是使用下劃線。這樣,有人仍然可以侵入別人的私處,但知道它不被支持。 – 2010-12-15 17:03:59

1

我們在tinyHippos中使用模塊模式。

這裏是一個博客文章中,我們的話題here

基本上你最終寫道:

var nameSpace = {}; 

// class constructor 
nameSpace.SomeClass = function (arg1, arg1) { 

    var _privateProperty = "foo"; 

    function _privateMethod() {} 

    // return public methods 
    return { 
     publicProperty: "bar", 
     publicMethod: function publicMethod() { } 
    }; 

}; 

var obj = new nameSpace.SomeClass("arg1", "arg2"); 
+0

這與在'this'道具上定義私人內部功能/道具和公共func有什麼不同? – 2010-12-15 17:07:47

+0

@JuanMendes在這個例子中'new'關鍵字是可選的。 'var obj = namespace.SomeClass(「arg1」,「arg2」);'也適用。 – Raynos 2011-04-05 07:07:10

+0

它「有點」的作品。這兩種情況都會導致'obj instanceof nameSpace.SomeClass'返回false。對我來說,任何創建對象的模式都不應該破壞'instanceof'。我發佈了一些關於如何使用或不使用'new'來實現對象構造的工作,它不會中斷'instanceof' http://js-bits.blogspot.com/2010/08/constructors-without-using-new.html – 2011-04-05 16:28:51

相關問題