2010-11-28 61 views
3

我建立一個庫(https://github.com/OscarGodson/storageLocker),localStorage包裝更確切,但因爲這是我第一次嘗試OO JavaScript I還在學習,我有幾個問題。建立我的JS庫,幾個問題

  1. 我在其他庫中看到有時他們用匿名函數包裝它們。我應該或者應該這樣做嗎?如果是這樣,如何不破壞任何東西?

  2. 對於內部API(基本上是內部函數),我應該如何編寫它們?應該將它們添加到主要對象,例如storageLocker.prototype.myInternalFunction()或只是myInternalFunction()隨機在我的腳本?我不希望這些函數是全局的,儘管...例如,其中一個函數只是檢查JSON中的一堆項目,查看它們的對象,然後檢查對象類型是什麼(如Date()),然後轉換它。

  3. 如何/我應該在哪裏添加全局,我的腳本,變量?例如我有一個名爲patterns的變種,就像var patterns = {"date":/\/Date\(([0-9]+)\)\//},我應該如何將其添加到我的腳本中?

非常感謝。我想寫我的腳本正確的方式所以即時通訊問你們。我不知道任何JS傢伙是在本地做任何OO JS的,他們都老學校類型...

+1

我強烈推薦閱讀關於(JavaScript)關閉。他們是這種語言的力量。 – jwueller 2010-11-29 01:42:53

+0

很酷,謝謝:) – 2010-11-29 02:07:54

回答

2

http://nefariousdesigns.co.uk/archive/2010/10/object-oriented-javascript-follow-up-part-2-technical/

對命名空間,值得一讀一個體面的部分。

http://yuiblog.com/blog/2007/06/12/module-pattern/

也是另一個很好的概述。

有關良好的JavaScript做法更偉大的材料,檢查出

http://javascript.crockford.com/

我們在意見討論後,我已經改變了例如這樣:

var storageLocker = function (selector) { 

    var _selector = selector || "default value"; 

    function myPrivateFunction() { 

    } 

    var public = { 

     get: function() { 
      return _selector; 
     }, 

     uppercase : function() { 
      _selector = _selector.toUpperCase() 
      return this; 
     } 

    } 
    return public; 

}; 

// use: 
var test = storageLocker("search for this").uppercase().get();; 

alert(test); 

雖然這不完全是庫/模塊的例子(因爲您通過直接調用構造函數來訪問代碼),但它是一個e將範圍中的同一對象保留在範圍中以進一步鏈接方法的示例。實際上它不返回storageLocker對象,它返回'public'對象,但該對象通過關閉訪問storageLocker的範圍。

可能還有其他更好的方法來做到這一點,或許返回storageLocker對象本身,但這需要更多的思考。

3

我會說:

1)這種技術的目的是不污染全局命名空間。這是一件好事。 在下面的示例中,您可以看到與庫的所有交互都是通過一個對象MyLibrary進行的。公共API是匿名函數的返回值。

var MyLibrary = function() { 
// private 
    this.InternalVariable = 'some value'; 

    function internalFunction(x,y) { 
     return x + y; 
     } 

    function getInternalVariable() { 
    return this.InternalVariable; 
} 
// public 
    return { 
     publicVariable : '1.0', 
     publicFunction : function(x,y) { 
     return x + y 
     }, 
accessInternalVariable : function() { 

    return getInternalVariable(); 
    } 
     } 
    }(); 

2)也看到上面的例子,如果上如何把你的「內部」的功能

3)你的全局變量是某種配置選項的,我只是公開的setter /吸氣並保持變量 「私有」

+0

太棒了!你搖滾人。不,沒有配置選項,所以你`this.InternalVariable`應該可以正常工作。我會試試看,如果所有這些工作正常,那麼標記爲正確;)再次感謝! – 2010-11-29 00:18:31