2012-02-26 9 views
0

可能性の重複:
Passing in dynamic key:value pairs to an object literal?
Javascript Object Literal referring to another property in itself from another propertyJavaScript:リテラル表記を使用して同じオブジェクトに属する別のプロパティを使用してオブジェクトのプロパティを定義できますか?

var var1 = {}; 

var1.number = 20; 
var1.numberplus3 = var1.number + 3; 
console.log(var1.numberplus3); 

var var2 = { 
    number: 20, 
    numberplus3: number + 3 
}; 
console.log(var2); 

この例でvar1.numberplus3は23と評価されたがvar2.numberplus3は "未定義" と評価されます。どうしてこれなの?

(私はCodecademyでJSインタプリタを超える使用しています:http://labs.codecademy.com/#:workspace

ありがとう!

+1

@Tomasz。 *編集:*ああ、私は間違っていた...タイトルを読んでいるはずです...コードは私を混乱させました、申し訳ありません。 –

+0

@kinakuta: 'var2.number'も' this.number'もうまくいきません。 'var2'はまだ定義されていないので、' var2'は動作しません。 'this'はコードが実行されている場所(おそらく' windwow')のコンテキストを参照しますが、100%は 'var2'ではありません。 –

+0

Woops。うん、私はnumberplus3 = var2.number + 3と書くことを意味しました!それは私が実際に走ろうとしたものです! –

答えて

1

あなたは次のように書く必要があります。この場合には、それは別のオブジェクトのプロパティです...それは少し違う:

var var2 = { 
    number: 20, 
    numberplus3: function() { return var2.number + 3; } 
} 

か:

var var2 = { 
    number: 20 
}; 
// at this point the var2 object is defined and accessible in the memory 
var2.numberplus2 = var2.number+3; 
+0

ああああ...だから、number2を定義していないときにvar2が定義されていないことに対処する必要がありますか?おそらくこれは、number2が設定された後にのみnumberplus3の関数が評価されるためです。 –

+0

@StanislavBeremskiあなたが考えている、あなたはメモリ内でアクセスできない変数を参照しようとすると、編集を見てください。 – user544262772

+0

素晴らしい...私は今理解していると思う。乾杯! –