Je voudrais déclarer certaines variables, puis laissons une fonction construire les objets réels et assigner leur référence à ces variables précédemment déclarées.Javascript - Définir la valeur variable à l'intérieur de la fonction
La façon dont je le fais fonctionne maintenant, mais cela devient fastidieux avec beaucoup de variables.
function bar(obj) {
var newObject = {'an':'object'};
obj['element'] = newObject;
}
function foo() {
var ref={};
bar(ref);
ref=ref.element; // Tedious line
}
Pour ceux qui se demandent pourquoi je voudrais faire une telle chose, je construit une fonction simple pour générer le DOM de JSON. Il va quelque chose comme ça, avec #bind
utilisé pour faire ce que bar
fait dans l'extrait précédent:
var legend = {};
$('#element').append(['form',['fieldset',
['legend',{'#bind':legend},['text':'Legend title']]
]].getDomForThis());
legend=legend.element;
Maintenant, je peux ajouter quelques nouveaux éléments après la légende avec quelque chose comme
for(fieldName in fields) {
legend.insertAfter(['div',[['input',['name':fieldName]],...]].getDomForThis());
}
Je voudrais pour éviter d'avoir à écrire la ligne fastidieuse. C'est comme createElement
et appendChild
, un appel de fonction devrait suffire!
MISE À JOUR: Après réflexion, je crois qu'il n'y a aucun moyen de le faire avec Javascript. J'espérais quelque part de la magie Javascript cachée, mais j'ai des raisons de penser que ça n'arrivera pas.
Fondamentalement, je voudrais attribuer à une référence de variable une nouvelle valeur, sans créer une nouvelle référence. Mais un argument de fonction a
est distinct de la variable v
qu'il représente. Les objets pointés sont les mêmes, mais l'adresse des deux variables est différente. Par conséquent, l'attribution d'une nouvelle valeur à a
ne peut en aucun cas modifier la valeur de v
. En d'autres termes, chaque variable a sa propre adresse, et il n'y a pas d'autre moyen de changer ce qu'elle pointe, que de la référencer explicitement.
Et dans mon cas, parce que ref
est "privé" à la fonction, il n'y a aucun moyen d'y accéder depuis un autre endroit.
Dommage ...
Ai-je tort ou "ref = ref.element;" dans votre 1er exemple devrait lire "ref = obj.element;" ? – MaxiWheat
Et ne devrait pas barre (obj) dans ce même lieu être barre (ref)? – epascarello
à droite, j'ai hésité entre les deux. Fixé. – Gzorg