我有一个函数调用,它返回ref对象文字nameObj
。我想访问返回的对象中的方法,但我收到js错误。为什么setNameObj
对象上没有nameObj
方法?
var nameObj=function(){
var _locname;
return {
item:'item1',
getNameObj: function(){
return _locname
},
setNameObj: function(nm){
_locname = nm
}
}
}
console.log(nameObj.setNameObj('tempValue'));
console.log(nameObj.getNameObj());
答案 0 :(得分:6)
因为nameObj
是一个函数,它返回一个包含方法的对象!
尝试调用然后调用结果上的函数:
console.log(nameObj().setNameObj('tempValue'));
console.log(nameObj().getNameObj());
当然在这种情况下它很大程度上没有实际意义,因为每次调用都会创建一个新的闭包。您最有可能想要一个变量(或者只是将nameObj
转换为IIFE)。
var obj = nameObj();
obj.setNameObj('tempValue');
console.log(obj.getNameObj());
答案 1 :(得分:2)
因为您将#define
设置为函数而不是该函数的结果。看起来你想在这里使用IIFE,所以只需在函数表达式的末尾添加括号:
nameObj

答案 2 :(得分:0)
由于nameObj是一个函数,你必须在它们后面加上括号来评估: nameObj()
答案 3 :(得分:0)
你可能想要的是:
var nameObj= (function(){
var _locname;
return {
item:'item1',
getNameObj: function(){
return _locname
},
setNameObj: function(nm){
_locname = nm
}
}
})();
console.log(nameObj.setNameObj('tempValue'));
console.log(nameObj.getNameObj());
请注意nameObj定义周围添加的括号(两组)。获取函数和获取函数的结果之间存在显着差异。