Prenons l'exemple suivant:jQuery différés et console.log - Comportement étrange
var $_dfd = $.Deferred(),
$_x = {};
$_x = {
a: 1,
b: 2
};
console.log($_x); // Gives {a: 1, b: 2, more: {c: 3, d: 4}} <== Weirdness here
console.log($_x.a); // Gives 1
console.log($_x.more); // Gives undefined
$_dfd.pipe(function($_x) {
$_x.more = {
c: 3,
d: 4
};
return $_x;
});
$_dfd.resolve($_x).done(function($_x) {
console.log($_x); // Gives {a: 1, b: 2, more: {c: 3, d: 4}}
});
Je suis vraiment totalement déconcerté par console.log sortie # 1. Il y a deux questions qui doivent répondre:
Quel est l'état réel de la
$_x
variable à la première sortie CONSOLE.LOG?Si console.log n'est pas un moyen sûr de comprendre l'état des variables lorsque vous travaillez avec différé, quelles sont les autres meilleures alternatives?
Merci!
ne suis pas sûr de la question différée, mais notez qu'il n'y a pas de point initialisant '_x' $ à un objet vide lorsque vous jeter immédiatement que loin et l'assigner égal à un second objet. – nnnnnn
P.S. Je me suis souvenu que j'avais déjà vu quelque chose à propos de 'console.log()' se comportant comme ceci: http://stackoverflow.com/q/11118758/615754 - une solution consiste à cloner l'objet avant de le consigner: 'console.log (JSON.parse (JSON.stringify ($ _ x))); ' – nnnnnn
@nnnnnn a raison, si vous déboguez et passez dessus - il produit la sortie correcte. En utilisant l'astuce clone fonctionne aussi bien http://jsfiddle.net/2tfTr/ –