2016-08-12 123 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 

这已经基本无关,与调用存储在一个对象作为您的示例中的功能。