2017-12-20 9 views
0

における内部変数を参照:は、このような単純なJSオブジェクト内のJSオブジェクト

var LeadserData = { 
    agent_id: 2, 

    object_queries: { 
     emails: { 
      url: "/manual_emails/", 
      method: 'GET', 
       send_data: { 
        the_id: this.agent_id 
       } 
     } 
    } 
} 

単にこのようAGENT_IDにアクセスするために明らかに可能である:

LeadserData.agent_id = 100; 
alert(LeadserData.agent_id); 

これは明らかに100を返します。しかし、なぜthis.agent_idの内部参照が機能しないのですか?

alert((LeadserData.object_queries.emails.send_data.the_id)); 

私は、これは同様に「100」と出てくることを期待しましたが、代わりにそれが定義されていません。フィドル全体はここにあります:https://jsfiddle.net/h88zc5nw/1/

この動作の説明は何ですか、そしてこれを調整して、予期した100を返すにはどのようにすればいいですか?

+0

'LeadserData.agent_id'は' LeadserData.object_queries.emails.send_data.the_id'と同じではありません。一方を変更すると、2つの異なるオブジェクトの2つの異なるプロパティであるため、一方を変更しても他方には影響しません。 –

+0

構文はエラーを返しません。このエラーはthis.agent_idが有効でない場合に発生します。 "RandomVariable"でエラーを返します。 – charliez

+0

エラーが発生する理由はないため、エラーはありません。 'this'値は、オブジェクトを参照しますが(ほとんどの場合)、あなたが望むものではありません。 –

答えて

1

まず、オブジェクトリテラルを使用しています。オブジェクトリテラル内にthisを使用することはできません。少なくとも、それはあなたが思うものではありません。オブジェクトリテラルが構築されている間は利用可能なものはthisになります。

第2に、上のように動作すると仮定しても、数値はネイティブ型であり、参照によって共有されることはありません。 LeadserData.agent_idを変更しても、一方を他方に割り当てても、LeadserData.object_queries.emails.send_data.the_idには影響しません。ネイティブタイプは割り当て時にコピーされ、参照を使用して渡されることはありません(オブジェクトと同じように)。

+0

ありがとうございます。今、私が理解しているように、 "the_id"はそれが参照しているものの値に "設定"されますが、他の値に動的に依存する方法はありますか?上記の例では、agent_idを1つの場所でのみ宣言することができます(実際のコードにはobject_queriesがいくつかあります)。 – charliez

+0

@charliezなぜそのプロパティを 'object_queries'に追加しますか?それらはすべて同じオブジェクトを形成し、 'LeadserData.agent_id'だけで十分です。 –

+0

問題ありません、あなたは歓迎していない...これをチェックアウト、 '(関数(){ するvar AGENT_ID = 2、 LeadserData = { object_queries:{ 電子メール:{ URL: "/ manual_emails /"、 方法: 'GET'、 SEND_DATA;(LeadserData.object_queries.emails.send_data にconsole.log} }}:{ the_idは をAGENT_ID}。the_id); })(); ' –

関連する問題