2009-12-21 5 views
0

Je veux utiliser la valeur du champ de l'objet tout en créant un autre objet en utilisant la notation littérale:Javascript: Utiliser la valeur du champ de l'objet pour déterminer un autre objet le nom du champ littéral

var T = { 
fieldName : 'testField' 
}; 
/* 
// Doesn't work. 
var test = { 
T.fieldName : 'value' 
}; 
*/ 
// Does work. 
var test = []; 
test[T.fieldName] = 'value'; 
alert(test.testField);   // test 

Mais il ne fonctionne pas.
Existe-t-il un moyen de résoudre ce problème ou d'utiliser des crochets?

Mise à jour: Code non fonctionnel supprimé.

+2

Vous avez pas essayé d'exécuter le code affiché, vous avez? – thorn

+0

Oups, ça semblait marcher pour moi. Retiré le mauvais code. – Li0liQ

Répondre

2
var T = { 
fieldName : 'testField' 
}; 
var dummy = T.fieldName;  // dummy variable 
var test = { 
dummy : 'value' 
}; 
alert(test.testField);   // test 

Cela ne devrait pas fonctionner. La valeur 'value' sera stockée dans test.dummy, pas test.testField. La façon de le faire serait:

var T = { 
fieldName : 'testField' 
}; 
// Does work. 
var test = {}; 
test[T.fieldName] = 'value'; 
alert(test.testField);   // alerts "value" 

Ce qui est ce que vous avez déjà

+0

Cela a semblé marcher pour moi :). Testé et supprimé de la question comme code incorrect. – Li0liQ

2

Votre variable « test » est un tableau, pas d'objet.

Vous devez créer "test" comme "= {}" au lieu de "= []".

0

Une façon possible est.

var T={ 
    testField : 'testField' 
}; 

    eval ('var test = {' + T.testField + ':' + value + '}'); 

Et vous faites ce générique, quelque chose comme ça

function MakeVar(varName,fieldToUse,valueToPass) 
{ 
     var res = 'var ' +varName+ '= {' + T.testField + ':' + value + '}' 
    eval(res); 
} 

var T={ 
    testField : 'testField' 
}; 


    MakeVar('test',T.testField,'value'); 
    var outt=test.testField; 

Hope this helps

Questions connexes