Return 作为 IIFE 中的 属性 的变量
Return a variable as a property in an IIFE
我正在尝试 return 将 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
.[=16,它会更清晰=]
我试图阅读 JS 闭包,但没有得到任何关于为什么没有对私有变量的正确引用的信息。
我猜你是想在返回的对象中写 localInformation
。
问题是您正在将 localInformation
变量名重新分配给新对象。
localInformation = _demoAPICall()
意味着你的 InfoProp
属性 指向 localInformation
(空对象)的初始值,而在函数内,你得到 [=13= 的最新值].
您有两个选择:
1) 扩展现有对象而不是将变量名分配给新对象:
extend(localInformation, _demoApiCall())
您可以使用 jQuery 的扩展,而不是来自 lodash 的扩展,或者任何其他实现都可以。
2) 使用getter方法
return {
Init: Init,
get InfoProp () { return information },
....
}
我正在尝试 return 将 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
.[=16,它会更清晰=]
我试图阅读 JS 闭包,但没有得到任何关于为什么没有对私有变量的正确引用的信息。
我猜你是想在返回的对象中写 localInformation
。
问题是您正在将 localInformation
变量名重新分配给新对象。
localInformation = _demoAPICall()
意味着你的 InfoProp
属性 指向 localInformation
(空对象)的初始值,而在函数内,你得到 [=13= 的最新值].
您有两个选择:
1) 扩展现有对象而不是将变量名分配给新对象:
extend(localInformation, _demoApiCall())
您可以使用 jQuery 的扩展,而不是来自 lodash 的扩展,或者任何其他实现都可以。
2) 使用getter方法
return {
Init: Init,
get InfoProp () { return information },
....
}