数组在对象文字表示法中添加函数

时间:2013-05-14 21:22:32

标签: javascript object literals

这是我正在使用的代码,不太确定如何使用文字符号,我必须以某种方式将currentActiveCategories传递给函数。不确定这是否是首选的方法,不想学习坏习惯。

var primaryCare = {
    currentActiveCategories : [ "1", "2"],
    currentValue : addValues(this.currentActiveCategories)
}

function addValues(activeCategories) {
    tempTotal;
    for(int i = 0; i < activeCategories.length; i++){
        tempTotal += activeCategories[i];
    }
    return tempTotal;
}

1 个答案:

答案 0 :(得分:2)

目前,您的对象文字会创建一个对象,其中包含两个属性currentActiveCategories(一个数组)和currentValue,该属性设置为调用addValues() 的结果评估对象文字的时间。您正试图使用​​this.currentActiveCategories调用该函数,该函数将为undefined,因为此时this不等于该对象。

如果想要有一个可以随时返回当前总数的函数,你可以这样做:

var primaryCare = {
    currentActiveCategories : [ "1", "2"],
    currentValue : function () {
                      var tempTotal = "";
                      for(var i = 0; i < this.currentActiveCategories.length; i++){
                         tempTotal += this.currentActiveCategories[i];
                      }
                      return tempTotal;
                   }
}

primaryCare.currentValue(); // returns "12", i.e., "1" + "2"

始终使用var声明变量,否则它们将成为全局变量 - 请注意,您无法在JS中声明int。在开始向其中添加字符串之前,您需要将tempTotal初始化为空字符串,或者代替"12"获得"undefined12"

当您将函数作为对象的方法调用时,如primaryCare.currentValue()(如上所示),则函数this中的函数将被设置为该对象。

将值添加为字符串对我来说似乎有点奇怪。如果您想使用数字并获得数字总数,您可以这样做:

var primaryCare = {
    currentActiveCategories : [ 1, 2],   // note no quotes around the numbers
    currentValue : function () {
                      var tempTotal = 0;
                      for(var i = 0; i < this.currentActiveCategories.length; i++){
                         tempTotal += this.currentActiveCategories[i];
                      }
                      return tempTotal;
                   }
}