Objets JavaScript passer-par-référence
Veuillez lire les commentaires dans le code ci-dessous pour savoir ce que je suis en train
pour demander.
Résultat attendu: Comme par laissez-passer-par-mécanisme de référence en JavaScript, objOne
est prévu pour se connecter {}
à la fin, parce que objTwo
a été initialisé avec {}
.
var objOne = {
x: 1,
y: 2
};
var objTwo = objOne;
//change the x vlaue to 2 by objTwo
objTwo.x = 2;
//Change the value of key x in objOne as well - pass by reference mechanism
console.log(objOne); //{ x: 2, y: 2 }
/*** Pass by reference is understood in code, above this comment ***/
//Now what if objTwo initialized with empty object
objTwo = {};
console.log(objOne); //{ x: 2, y: 2 } but expected output = {}
//As per pass by reference mechanism. objOne is expected to log {}, because objTwo was initialized with {}.
source d'informationauteur Abhay Garg | 2016-05-18
Vous devez vous connecter pour publier un commentaire.
Lorsque vous affectez une variable à l'autre, ce n'est pas que ces deux variables sont reliées par référence; vous êtes à l'incompréhension de ce "passage par référence" signifie ici.
Une variable contenant un objet n'est pas "directement" tenir un objet. Ce qu'il détient est un référence à un objet. Lorsque vous affectez que la référence d'une variable à l'autre, vous faites une copie de cette référence. Maintenant, les deux variables contenir une référence à un objet. La modification de l'objet à travers que les changements de référence pour les deux variables de la tenue d'une référence à cet objet.
Lorsque vous assigner une nouvelle valeur à une variable, vous êtes juste en modifiant la valeur de cette variable contient. La variable est maintenant cesse de détenir une référence à l'objet, et au lieu détient quelque chose d'autre. L'autre variable possède encore sa référence à l'objet d'origine, la cession n'a pas d'influence du tout.
Lorsque vous évaluez
Javascript qui interprète comme de la réattribution des objTwo à une nouvelle littéral d'objet vide, et laisse son ancienne valeur seul.
Si vous souhaitez supprimer une clé de objOne par référence, vous pouvez utiliser le
delete
mot-clé:De 2 variables pointent vers le même objet, cela ne signifie pas qu'ils sont maintenant comme par magie "esclaves" les uns des autres.
Dans votre cas,
objTwo = {}
s'agit simplement de changerobjTwo
de pointer le nouvel objet que vous avez créé.objTwo = {};
ne fonctionne pas de la manière que vous pensez que cela fonctionne. Je recommande généralement de la pensée de variables comme des "pointeurs".objOne
etobjTwo
sont deux totalement différents variables. Lorsque vous avezobjTwo = {};
ce qu'elle voulait, c'était avoir laobjTwo
variable point à un autre objet. Il ne modifie pas lesobjOne
variable.Nous allons visualiser:
seulement supprimer pouvez appeler initialiser l'état ..
@nrabinowitz disant
JavaScript passage par référence est différente, votre objet est traitée comme une référence aussi longtemps que vous êtes à la modification de ses attributs comme obj.x = 1, mais l'affectation de la variable objet lui-même (obj = []) va le traiter comme basée sur la valeur de la variable.