2010-12-17 13 views
-1

を渡す:Javascriptが私は次のコードがある場合はパラメータ

func({ 
    item: { 
     subItem: 89 
    }, 
    item2: { 
     message: 'I want the item.subItem value to be inside this value as well' 
    } 
}); 

を、それがfunc()以内に置き換えるいずれかを行うことなく、同様item2.messageに渡さitem.subItem値を持つことは可能ですか?

+1

? – brad

+0

私はあなたの質問を理解するので、パラメータを渡すこととは関係ありません。私が知る限り、オブジェクトリテラルを定義し、あるプロパティーが別のプロパティーを参照することができないように思われます。これは不可能です。それがあなたの望むものなら、あなたはヤコブが提案したことをしなければなりません。 –

答えて

5

オブジェクト定義の外からそれを割り当てない限り、これは不可能です。

var obj = { 
    item: { 
     subItem: 89 
    }, 
    item2: {} 
}; 

obj.item2.message = 'I want the ' + obj.item.subItem + ' value to be inside this value as well'; 

func(obj); 
+0

私は次の方がやや優雅だと思います: 'var shared = 89; func({item:{subItem:{共有}}、item2:{メッセージ: 'ここで+共有+'を使用します}}) –

1

番号彼らは独立したオブジェクトです。これが必要だと思ったら、オブジェクトに何か有用なことをさせるクラス(例えば、テンプレート)をオブジェクトに作成させてください。

0

これは何か?

var anItem = { subItem: 89 }; 

func({ 
    item: anItem 
    }, 
    item2: { 
     message: anItem 
    } 
}); 
0

直接的な方法で..私は使用してそれを行うだろうなし:

function func(a) 
    { 
     alert(a); 
    } 
    func 
    (
     new Item(10) 
    ); 

    function Item(subItemVal) 
    { 
      this.item = { subItem: subItemVal }; 
      this.item2 = { message: 'I want the ' + subItemVal + ' value to be inside this value as well' }; 
    } 
0

ありませんが、しかし、あなたは自動的にあなたのアイテムリストに対応するエントリを持つすべてのitem.XXXサブストリングを置き換えるために、このような何かを行うことができます:

function func(data) { 
    for (var key in data.item) 
     data.item2.message = data.item2.message.replace('item.'+key, o.item[key]) 
    print(data.item2.message) // I want the 89 value to be inside this value as well 
0

私はあなたがこれをやりたい理由は分かりませんが、このようなことができます。

これは非常にhack'ishで、私は本当にそれをお勧めしませんが、私はあなたが尋ねるものはないと思います...?

注:より良いソリューションが提供されています。あなたがFUNCに渡されるオブジェクトを構築するときに、ちょうどこれをしないのはなぜ

Live example

func(test = { 
    item: { 
     subItem: 89 
    }, 
    item2: { 
     message: 'I want the item.subItem value to be inside this value as well' 
    } 
},test.item2.message += ' ' + test.item.subItem); 


function func (obj) { 
    alert(obj.item2.message); 
} 
関連する問題