我试图在 IIFE 初始化后返回一个变量集作为属性。问题是,如果我直接绑定变量,我会得到一个空对象。如果我通过函数绑定它,我就会得到我想要的结果。
var Application = (function(){
var localInformation = {};
function init(){
localInformation = _demoApiCall();
}
function _demoApiCall(){
// Pretend this method isn't here, and returns a complex object
return {
name: "Demo"
}
}
function doWork(){
// localInformation is properly structured here if called
}
return {
Init: init,
DoWork: doWork,
InfoProp: localInformation, // returns {}
InfoMethod: function(){
return localInformation; // returns {name:"demo"}
}
}
})();
Application.Init();
console.log(Application.InfoProp);
console.log(Application.InfoMethod());
最初致电后Application.Init()
文档准备好后,该示例仅在我调用时才有效var inf = Application.InfoMethod()
,但是如果我可以打电话的话会干净得多var info = Application.InfoProp
.
我尝试阅读 JS Closures,但没有得到任何信息来解释为什么没有对私有变量的正确引用。
我猜你的意思是写localInformation
在你返回的对象中。
问题是您正在重新分配localInformation
新对象的变量名。
localInformation = _demoAPICall()
这意味着你的InfoProp
属性指向的初始值localInformation
(空对象),在函数内,您可以获得最新的值localInformation
.
您有两个选择:
1) 扩展现有对象而不是将变量名分配给新对象:
extend(localInformation, _demoApiCall())
您可以使用 jQuery 扩展至 lodash 的扩展,或者任何其他实现都可以。
2)使用getter方法
return {
Init: Init,
get InfoProp () { return information },
....
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)