Comment changer un objet avant l'appel d'une fonction ? Est-ce vraiment possible ?
P粉539055526
2023-08-30 15:10:19
<p>J'ai un problème js très étrange. J'ai un composant Vue (mais je ne pense pas que Vue soit importante ici). Il possède un attribut de données appelé <code>current_query</code>. Dans la méthode qui répond à l'événement, je souhaite modifier la propriété. Utilisez Lodash ici. Il y a un comportement très étrange. Supposons que <code>this.current_query</code> soit initialement égal à <code>{ test : 500 }</code>. Supposons que le paramètre <code>'field'</code> soit <code>'test'</code>. En le "désactivant" de <code>current_query</code>, je vais en fait effacer current_query lui-même. très bien. Le problème est que, uniquement lors de l'utilisation de unset, si j'enregistre current_query avant d'appeler unset, j'obtiens un objet vide. Comment se peut-il? </p>
<pre class="brush:php;toolbar:false;">on_applied_option_click(field){
console.log(this.current_query); // donne { test : 500 } (OK)
}, // Cliquez pour terminer
on_applied_option_click(champ){
console.log(this.current_query); // Ce n'est qu'en utilisant _.unset qu'un objet vide sera donné (??)
_.unset(this.current_query, champ);
console.log(this.current_query); // Donnera également un objet vide (OK)
}, // Cliquez pour terminer</pre>
<p>J'ai constaté que si j'utilise <code>_.omit</code>, tout fonctionne correctement : </p>
<pre class="brush:php;toolbar:false;">on_applied_option_click(field){
console.log(this.current_query); // donne { test : 500 } (OK)
this.current_query = _.omit(this.current_query, champ);
console.log(this.current_query); // Donne un objet vide, ce qui est OK pour le moment
}, // Cliquez pour terminer</pre>
<p>Pourquoi ? La seule chose que je peux dire, c'est que _.unset modifie l'objet tandis que _.omit crée de nouveaux objets. Cependant, je ne pense pas qu'il soit possible pour _.unset de modifier l'objet avant de l'appeler (???). Je n'ai jamais rien vu de pareil. Quelqu'un a-t-il une bonne explication à ce comportement étrange ? </p>
N'utilisez pas
console.log(this.current_query)
,尝试使用console.log(JSON.stringify(this.current_query))
。这样可以可靠地记录this.current_query
l'état au moment de l'enregistrement, plutôt qu'un éventuel état ultérieur.Cela devrait résoudre le problème de confusion.