更改对象文字函数中的var

时间:2010-11-19 11:08:18

标签: javascript object-literal

大家好我正在使用对象文字模式编写一些代码,我有一个返回值的函数:

'currentLocation': function() {
    var cL = 0;
    return cL;
    },

然后我需要从另一个函数更新变量'cL',如下所示:

teamStatus.currentLocation() = teamStatus.currentLocation() + teamStatus.scrollDistance();

这部分是另一个功能的一部分 - 但我收到一个错误说明:左侧无效分配

我猜我不能以这种方式更新变量,任何人都可以提出更好的方法或指出我正确的方向。

非常感谢任何帮助。

要添加更多代码以突出显示我要执行的操作:

'currentLocation': function() {
    var cL = 0;
    return cL;
    },
'increaseTable': function() {
    if (teamStatus.currentLocation() <= teamStatus.teamStatusTableHeight() ) {
        teamStatus.currentLocation = teamStatus.currentLocation() + teamStatus.scrollDistance();
        $("#tableTrackActual").animate({scrollTop: (teamStatus.currentLocation)});
        $("#tableMembers").animate({scrollTop: (teamStatus.currentLocation) });
        //console.log(teamStatus.currentLocation());
        teamStatus.buttonRevealer();
    }
}

正如您所看到的,increaseTable应该更新currentLocation的值 - 这有助于更清楚地了解我想要实现的目标。

3 个答案:

答案 0 :(得分:1)

您正在编写teamStatus.currentLocation() =,它调用函数teamStatus.currentLocation并尝试分配返回值。那是无效的。你只需要teamStatus.currentLocation = - 没有函数调用。

答案 1 :(得分:0)

函数内部的变量对该函数(以及其中定义的任何函数)完全是私有的。如果需要创建一些共享一组私有变量的函数,可以使用闭包来完成。例如:

var Thing = (function() {
    var thingWideData;

    function getData() {
        return thingWideData;
    }

    function setData(newData) {
        thingWideData = newData;
    }

    return {
        getData: getData,
        setData: setData
    };

})();

这样做会创建一个Thing对象,该对象具有getDatasetData个可用功能,可以获取并设置完全私有 {{1匿名闭包包含的变量。有关此模式herehere的更多信息,尽管后者更多地是关于私有方法而非私有数据。

答案 2 :(得分:0)

您的代码产生的是:

0 = 0 + <some number>

您要更新哪个变量? cL?您在函数中声明它,您不能从外部为它赋值。根据代码的其余部分,使用getters and setters

可能会更好
var object = {
    _cL = 0,
    get currentLocation() {
        return this._cL;
    },
    set currentLocation(value) {
        this._cL = value;
    }
}

然后你可以这样做:

teamStatus.currentLocation = teamStatus.currentLocation + teamStatus.scrollDistance();

<强>更新

关于IE:如果currentLocation实际上只是一个数字,那么将它声明为属性就足够了:

var obj = {
    currentLocation: 0
}