En Javascript The Good Parts, il est écrit:Pourquoi cet exemple Javascript copie-t-il la valeur de la variable au lieu de passer par référence?
donc j'attendre avec l'exemple de code suivant à la sortie puisque "les objets ne sont jamais copiés mais passés autour par référence", alors pourquoi sort-il ?
var page_item = {
id_code : 'welcome',
title : 'Welcome',
access_groups : {
developer : '0010',
administrator : '0100'
}
};
page_item.access_groups.member = '0000';
var member = page_item.access_groups.member;
member = '1001';
$('p#test').html(page_item.access_groups.member); //should be "1001" but is "0000"
Ajouté:
@Gareth @ David, merci, voilà ce que je voulais montrer dans cet exemple, fonctionne:
var page_item = {
id_code : 'welcome',
title : 'Welcome',
access_groups : {
developer : '0010',
administrator : '0100'
}
};
var page_item2 = page_item;
page_item2.access_groups.developer = '1001';
$('p#test').html(page_item.access_groups.developer); //is '1001'
Ceci est le même en Python, et facilement expliqué là ('x.y = ...' est un appel de méthode sur 'x' '__dict__',' x = ... 'n'est pas un appel de méthode). @Potential répondeurs: Y a-t-il un raisonnement similaire dans JS? – delnan
@delnan - 'x.y =' n'est pas un appel de méthode en Javascript. (Eh bien, il est * possible dans ECMAScript de définir des méthodes setter et getter pour les propriétés des objets mais ce n'est pas le paradigme qui a causé la confusion dans cette question) – Gareth