了解js返回类型

时间:2015-10-07 14:03:52

标签: javascript

我有一个函数调用,它返回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());

4 个答案:

答案 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定义周围添加的括号(两组)。获取函数和获取函数的结果之间存在显着差异。