web-dev-qa-db-fra.com

objet passe javascript comme référence

j'ai un objet, qui est passé dans de nombreuses fonctions différentes à l'intérieur d'une fonction. ces fonctions peuvent ou non changer la valeur de l'objet, mais si elles le changent, alors je voudrais obtenir les dernières modifications sur l'objet.

voici ce que j'essaie de faire:

var ob = {text: 'this is me', name: 'john'}

function (object) {

     changeObject(object);
     customObjectChanger(object);
     callback = function (object) {
          object.text = 'new text';
     }

     callback(object);

     // object value here should be object{text: 'new text', name: 'john'};    
}
35
Basit

En JavaScript, les objets sont toujours transmis par référence de copie. Je ne sais pas si c'est la terminologie exacte, mais une copie de la référence à l'objet sera transmise.

Cela signifie que toutes les modifications apportées à l'objet seront visibles pour vous une fois la fonction exécutée.

Code:

var obj = {
  a: "hello"
};

function modify(o) {
  o.a += " world";
}

modify(obj);
console.log(obj.a); //prints "hello world"

Cela dit, puisqu'il ne s'agit que d'une copie de la référence transmise, si vous réassignez l'objet à l'intérieur de votre fonction, cela ne sera pas visible en dehors de la fonction car il ne s'agissait que d'une copie de la référence que vous avez modifiée.

Code:

var obj = {
  a: "hello"
};

function modify(o) {
  o = {
    a: "hello world"
  };
}

modify(obj);
console.log(obj.a); //prints just "hello"
113
Adam Rackis

Les "objets" ne sont pas des valeurs en JavaScript et ne peuvent pas être "passés".

Toutes les valeurs que vous traitez sont des références (pointeurs vers des objets).

Passer ou attribuer une référence donne une autre référence qui pointe vers le même objet. Bien sûr, vous pouvez modifier le même objet via cette autre référence.

4
newacct

Ceci est plus d'explication pour Pass by value et Pass by reference (Javascript). Dans ce concept, ils parlent de passer la variable par référence et de passer la variable par référence.

passer par valeur (type primitif)

var a = 3;
var b = a;

console.log(a); // a = 3
console.log(b); // b = 3

a=4;
console.log(a); // a = 4
console.log(b); // b = 3
  • s'applique à tous les types primitifs en JS (chaîne, nombre, booléen, non défini, null).
  • a se voit allouer une mémoire (disons 0x001) et b crée un copie de la valeur en mémoire (disons 0x002).
  • Ainsi, la modification de la valeur d'une variable n'affecte pas l'autre, car elles résident toutes deux à deux endroits différents.

Passer par référence (objets)

var c = { "name" : "john" };    
var d = c;

console.log(c); // { "name" : "john" }
console.log(d); // { "name" : "john" }

c.name = "doe"; 

console.log(c); // { "name" : "doe" }    
console.log(d); // { "name" : "doe" }
  • Le moteur JS assigne l'objet à la variable c, il pointe vers une mémoire disons (0x012)
  • quand d=c, dans cette étape, d pointe vers le même emplacement (0x012).
  • changer la valeur de toute valeur change pour la variable.
  • les fonctions sont des objets

Cas particulier, passage par référence (objets)

c = {"name" : "jane"}; 
console.log(c); // { "name" : "jane" }    
console.log(d); // { "name" : "doe" }
  • L'égale (=) L'opérateur configure un nouvel espace mémoire ou une nouvelle adresse
1
Ashish Singh Rawat