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 では を宣言できないことに注意してください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;
}
}