2012-02-28 13 views
0

私はリテラル表記を使用してオブジェクトを作成しています。プロパティのいくつかに、以前に定義されたプロパティをその値として使用することは可能ですか?例えばJavascriptオブジェクトリテラル表記(関数を使用)

:あなたはvar x = { 'a': 1, 'b': x.a }ような何かをしようとしている場合、それは動作しません

var test = { 
     prop1: obj1, 
     prop2: obj2, 
     prop3: (prop1!=null)?prop1:prop2 
    }; 
+1

具体的にお聞かせください。あなたの例から、質問の性質がどういうものなのか分かりません。なぜなら、あなたはそれをかなり簡単にテストすることができるからです。あなたが示したいより詳細な例はありますか? – thescientist

+0

http://jsfiddle.net/jDzSC/ – xandercoded

答えて

1

xは定義されていません。

しかし、あなたはそれぞれのvar定義が順番に解釈されるためです

var 
    a = 12, 
    b = 24, 
    c = a + b; // 36 

ような何かを行うことができます。基本的には

var a = 12; 
var b = 24; 
var c = a + b; 

と同等ですが、オブジェクトと配列では定義全体が1回解釈されます。

+0

はい、これは私が探していたものです。 – HashTagDevDude

1

いいえはい。

次はできません。

var o = { 
    a : 42, 
    b : o.a //raises a TypeError, o is not defined 
}; 

var o = { 
    a : b : 42 //raises a SyntaxError, unexpected : 
}; 

は、以下の、しかし、以下のとおりです。

//referencing a pre-existing variable is obviously possible 
var ans = 42; 
var o = { 
    a : ans, 
    b : ans 
}; 

var o = { 
    a : 42 
}; 
//after the variable has been declared, you can access it as usual 
o.b = o.a; 

あなたは、単一のステートメントであること値によって制限されたと感じた場合、あなたは常に匿名を使用することができます関数:

var o = { 
    a : (function() { 
     doStuff(); 
     return otherStuff(); 
    }()) 
}; 
0

var test = { 
    prop1: obj1, 
    prop2: obj2, 
    prop3: (function() { 
    return (test.prop1!=null)?test.prop1:test.prop2; 
    })() 
}; 
関連する問題