0

これが私が使用しているコードです。リテラル表記の使用方法はまだよくわかりません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;
}
4

1 に答える 1

2

currentActiveCategories現在、オブジェクト リテラルは、配列である と、オブジェクト リテラルの評価時currentValueに呼び出しの結果に設定される の2 つのプロパティを持つオブジェクトを作成します。その時点で はそのオブジェクトと等しくないため、になります。addValues() this.currentActiveCategoriesundefinedthis

アイデアがいつでも現在の合計を返すことができる関数を持つことである場合、これを行うことができます:

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 では を宣言できないことに注意してくださいinttempTotal文字列を追加する前に、空の文字列に初期化する必要があり"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;
                   }
}
于 2013-05-14T21:34:21.793 に答える