这两种 JavaScript 模块模式在功能上有什么不同吗?
var MODULE = (function() {
var privvy = "I'm private!";
return {
getPublic: function() {
return "I'm public";
},
getPriv: function() {
return privvy;
}
};
}());
和
var MODULE = (function() {
var privvy = "I'm private!";
return new function() {
this.getPublic = function() {
return "I'm public";
};
this.getPriv = function() {
return privvy;
};
};
}());
我认为首先,一个具有两个公共成员的对象被显式声明然后返回。其中一个成员具有一个作为值的函数,该函数具有对“私有”变量的引用(即,闭包由立即执行的函数形成,但 getPublic() 方法在该函数完成执行后仍然可以访问该变量 -我认为)
在第二种情况下,通过匿名构造函数创建一个对象,该构造函数将两个函数分配给可公开访问的变量,IEF 创建一个闭包,以相同的方式限制对 priv 变量的访问。
这两种变化是否会产生完全相同的对象?