2012-09-26 12 views
14

JavaScriptは、オブジェクトを宣言するための多くの方法を提供します。JavaScriptオブジェクト宣言の構文 - プロパティとしての変数名

var person = { 
    'name': 'John', 
    'age': 23 
}; // "object literal syntax" 

var person = { 
    name: 'John', 
    age: 23 
}; // "object literal syntax" 

この構文について興味の事は、それがこのと同一であることである:あなたが手で入手可能なデータのほとんどを持っている場合は、次のように、(私の意見では)最も便利です

つまり、プロパティ名に引用符を使用したり、引用符を省略したりすることができます。

比較する単一のプロパティの動作を設定する方法には、次の2つのオプションがあること:右のオペランドが実際あるとき

person.birthday = "January 12"; // "dot syntax" 

または

person['birthday'] = "January 12"; // "array syntax" 

を「ドット構文は」のみ動作しますプロパティ名。あなたは、プロパティ名に変数を使用したい場合は、「配列構文」を使用する必要があり、すなわち:

var prop = "birthday"; 
person[prop] = "January 12"; 

、「オブジェクトリテラル構文」のプロパティ名に変数を使用することが可能です?プロパティ名を引用するかどうかは関係ありませんので、変数を使用する明白な方法はありません。私はこのような何かを探しています:ここで

var prop = "birthday"; 
var person = { 
    name: 'John', 
    age: 23, 
    (prop): 'January 12' 
}; 

私は、これは変数ではなくリテラル文字列であることを表現するために使用する仮想構文として(プロパ)使用しています。

ありがとうございました。

+0

私はあなたが配列の構文に固執する必要があると思う...多分にeval( '。人+小道具+」=「1月12日"')トリックを行うだろうが、私はこれが最適な解決策だとは思わない。 –

+1

@PhilippeBoissonneault - Ack! Evalは必要ではありません...この文脈では使用しないでください。 –

+0

あなたは、PHP変数の変数に相当するものを探しています: '$ foo = bar; $ bar = '123'; echo $$ foo; //実際には '123'を表示します – Ray

答えて

3

ES6は今、このすることができます:-)それをしない:

var obj = { 
    [prop]: 'value' 
}; 
7

いいえ、これは機能しません。そのため、プロパティ名を動的に設定する場合は、表記法が推奨され使用されます。

var k='propertyname'; 
object[k]="value"; 

ドット表記法を使用して、有効なインデックスまたはプロパティ名を設定することはできません。

+0

私は、「大括弧表記」という言い回しが好ましいと信じていますが、それ以外の場合は「はい」と考えています。 –

2

あなたはオブジェクトでこれを行うことはできませんが、代わりにコンストラクタ関数を使用することを検討している場合、それはこのようなものになります:もちろん

var prop = "birthday"; 
var Person = function() { 
    this.name = "Bob"; 
    this[prop] = "January 12"; 
}; 
var bob = new Person(); 

をあなたはまだここで配列表記を持っていますが、多分あなたが好きとにかくこのaproach :)キーは文字列の代わりにオブジェクトが(親オブジェクト内のネストのために言って)あるドットシンタックスのドロップイン置換を必要とする人々のために

4

、ここでいくつかの回避策です:

var developers = { 
    person: { 
     'name': 'John', 
     'age': 23 
    }, 
    anarchist: (function(){ var a = {}; 
     a['name'] = 'John'; 
     a['age'] = 23; 
     a[false] = false; 
     a[1] = 1; 
     a[window] = window; 
    return a; })(), 
    conformist: _.object([ 
     ['name', 'John'], 
     ['age', 23], 
     [false, false], 
     [1, 1], 
     [window, window] 
    ]) 
}; 

// console.log(developers); // <- to see var dump in Firebug 

アナキストの要素は、呼び出し後にガベージコレクションを取得するself-executing-functionを使用し、サイトにunderscore.jsを含めることができる場合、conformist要素は_.object()関数を使用します。

私は組み込みのObject()およびArray()関数がキーと値をアンダースコアで渡すことを許可したいと考えています。JSは

+0

自己呼び出し機能の低下が私の好ましい解決策+1です – Fydo

関連する問題