我正試圖圍繞不同模塊模式的偏移量進行打包。我看到寫這些模塊和暴露他們的數據的不同方式。JavaScript模塊模式差異
我在期待有關優缺點的信息,這裏沒有描述的更好的模式以及它們中的每一個的用例。
A)對象文字包裝在自調用函數,發射了用init
方法:(source)
(function() {
var MyModule = {
settings: {
someProperty: 'value';
}
init: function() {
someMethod();
}
someMethod: function() {
// ...
}
};
MyModule.init();
})();
This是的一個例子的簡單的 「鳴叫這種」 實用程序我建立。我是否正確使用此模式?到目前爲止,這是我唯一一個有實際寫作經驗的人。
B)模塊的名稱空間的自調用匿名函數:(source)
var MyModule = (function() {
var MyObj = {}
function privateMethod() {
// ...
}
MyObj.someProperty = 1;
MyObj.moduleMethod = function() {
// ...
};
return MyObj;
}());
是否有比以往的風格有什麼優勢/劣勢?另外,在這裏使用對象文字符號的含義是什麼,而不是示例中的點語法?對象文字看起來更簡潔,但我並沒有真正意識到每個用例的恰當用例。
C)模塊作爲命名空間自調用匿名功能,而只能通過一個return
塊暴露期望的結果:(source)
var MyModule = (function() {
var myPrivateVar, myPrivateMethod;
myPrivateVar = 0;
myPrivateMethod = function(foo) {
console.log(foo);
};
return {
myPublicVar: "foo",
myPublicFunction: function(bar) {
myPrivateVar++;
myPrivateMethod(bar);
}
};
})();
類似於先前的樣式,而是暴露的的整個對象及其所有屬性/方法,我們只是通過return
聲明暴露特定的數據位。
d)模塊作爲包裹在自調用匿名功能的功能,具有嵌套函數作爲方法。該模塊通過窗口對象暴露,然後經由new
關鍵字構造:(source)
(function(window, undefined) {
function MyModule() {
this.myMethod = function myMethod() {
// ...
};
this.myOtherMethod = function myOtherMethod() {
// ...
};
}
window.MyModule = MyModule;
})(window);
var myModule = new MyModule();
myModule.myMethod();
myModule.myOtherMethod();
我假設這圖案的強度是如果模塊是一個種類,其中多個實體可能需要的「模板」存在於應用程序中。任何一個好的用例的具體例子?
你應該看看Addy Osmani的書Javascript Design Patterns。它爲初學者介紹了這個主題。你可以在這裏免費閱讀https://addyosmani.com/resources/essentialjsdesignpatterns/book/ – nick
這是一個非常廣泛的問題... –