【发布时间】:2016-08-12 20:29:20
【问题描述】:
我的 js 是这样做的:
var MyClass ={
a: 1,
b: 2,
init: function(message){ console.log("calling c to say "+message);};
};
MyClass.init("hello");
//以上代码都在js文件中
我一直在看到 IIFE 模式,但与上面相比,我恐怕看不出它给我带来了什么好处。 我有一个模块 MyClass 并能够在其上调用方法。使用这种模式有缺点吗?
【问题讨论】:
-
缺点是它是一个普通对象,你没有闭包提供的封装。
-
您能详细说明一下吗?我了解以下答案中发生的事情,但这与我的模块创建无关。答案只是执行一个函数和一些代码。没有创建模块或封装。你是说在我的对象中我可以访问 MyClass.a 和 MyClass.b 等,但是如果我使用 IIFE,将能够控制它吗?如果我必须将其重写为 IIFE,我会怎么做?谢谢我是js新手
-
当然有封装——你无法到达
x,因为它在闭包内。答案不会创建模块,而是因为其目的是展示您的解决方案将缺少什么,而不是因为它显示“如何制作模块”。鉴于您声称您已经知道这一点,因此再次回顾它是多余的。 -
当我声称能够制作一个模块时,我指的是上面的 MyClass 代码。如果我不需要像 x 这样的私有变量,我制作“模块”的方式就足够了吗?如果不能,请告诉我如何使用 IIFE?我要仔细看一下才能理解
标签: javascript iife