我正在開發一個JavaScript庫,並希望將不同模塊中的Javascript對象的可選方法組存儲起來。AMD單點JavaScript擴展方法對象
該庫有兩個模塊,我們稱它們爲ModuleA和ModuleB。 ModuleA導出一個類對象,我們稱之爲ClassA,它只具有最小的核心功能。 ModuleB定義了一組在ClassA原型上設置的可選方法。
在第三個模塊不在庫,ModuleC,我想以下幾點:
如果我只導入ModuleA和實例ClassA的,我知道我有機會獲得上使用'InstanceA所有ModuleA方法InstanceA.MethodA(...)」。 (其他方法也可以在InstanceA上定義)
如果我導入ModuleA和ModuleB並實例化ClassA,我知道我可以使用'InstanceA.MethodA(「)訪問InstanceA上的所有ModuleA方法和ModuleB方法。 ..)'和'InstanceA.MethodB(...)'。
我已經考慮了一些解決方案,但我不確定是否有一個首選的方法來實現這一點。以下是我考慮的內容:
ModuleB更改ClassA ModuleB導入ModuleA並更改ClassA的工廠。這些變化會保證持續嗎? AMD是否保證在一個環境中導入相同的模塊始終返回相同的對象?
ModuleB返回改變的ClassA ModuleB擴展ClassA並返回新的Object。在這個例子中,這可能工作得很好,只有兩個模塊,但是多個可選方法模塊呢?
如果您遇到過類似的情況以及您的解決方案,請讓我知道。
順便說一句,這兩種方法的工作。但是,據我所知,第一種方法依賴於非標準行爲。我測試過的模塊加載實現保留了加載模塊的緩存版本。但是,AMD規範似乎沒有任何關於模塊定義副作用的說法。如果這是錯誤的,請糾正我。 –
Dojo AMD Loader [文檔](http://livedocs.dojotoolkit.org/loader/amd):'define'有兩個額外的重要特徵,可能不會立即顯現出來: – phusick
1.模塊創建是惰性的並且是異步的,當調用'define'時不會立即發生。這意味着工廠沒有執行,並且模塊的任何依賴關係都不會被解析,除非某些運行代碼實際需要該模塊。 – phusick