2016-08-12 103 views
0

我的JS做到這一點:的JavaScript模塊創建和初始化

var MyClass ={ 
     a: 1, 
     b: 2, 
     init: function(message){ console.log("calling c to say "+message);}; 
}; 

MyClass.init("hello"); 

//所有上面的代碼是在js文件

我一直遍佈看到IIFE模式,但恐怕我不知道看看它與上面相比有什麼好處。 我有一個模塊MyClass並能夠調用它的方法。使用這種模式有缺點嗎?

+1

缺點是它是一個普通的對象,並且你沒有封閉提供的封裝。 – vlaz

+0

請您詳細說明一下嗎?我理解下面的答案中發生了什麼,但這與我的模塊創建無關。答案只是執行一個函數和一些代碼。沒有創建模塊或封裝。你是否在我的對象中說我可以訪問MyClass.a和MyClass.b等,但如果我使用一個IIFE,將能夠控制它?如果我不得不將這個改寫爲IIFE,我該怎麼做?謝謝我是js newb –

+0

當然有封裝 - 你不能到達'x'因爲它在封閉內。答案並不是創建一個模塊,而是因爲它的目的是要顯示你的解決方案缺乏,而不是因爲它展示了「如何製作模塊」。鑑於你聲稱你已經知道,再次重複它會是多餘的。 – vlaz

回答

1

的IIFE用於創建一個新的功能範圍,以避免泄露變量導入到全局範圍:

(function() { 
    var x = 1; 
    console.log(x); // 1 
})(); 

console.log(x);  // undefined 

這已經基本無關,與調用存儲在一個對象作爲您的示例中的功能。