0

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

'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 的值 - 帮助这更清楚地说明我想要实现的目标。

4

3 回答 3

1

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

于 2010-11-19T11:17:28.020 回答
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
}
于 2010-11-19T11:19:18.050 回答
0

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

var Thing = (function() {
    var thingWideData;

    function getData() {
        return thingWideData;
    }

    function setData(newData) {
        thingWideData = newData;
    }

    return {
        getData: getData,
        setData: setData
    };

})();

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

于 2010-11-19T11:14:13.820 回答