Bagaimana untuk menukar objek sebelum panggilan fungsi? Adakah ini benar-benar mungkin?
P粉539055526
2023-08-30 15:10:19
<p>Saya mempunyai masalah js yang sangat pelik. Saya mempunyai komponen Vue (tetapi saya rasa Vue tidak penting di sini). Ia mempunyai atribut data yang dipanggil <code>current_query</code>. Dalam kaedah yang bertindak balas kepada acara, saya ingin mengubah suai harta. Gunakan Lodash di sini. Terdapat satu kelakuan yang sangat pelik. Andaikan <code>this.current_query</code> pada mulanya sama dengan <code>{ ujian: 500 }</code>. Andaikan bahawa parameter <code>'field'</code> ialah <code>'test'</code>. Dengan "menyahtetap" ia daripada <kod>current_query</code>, saya sebenarnya akan mengosongkan current_query itu sendiri. sangat bagus. Masalahnya, hanya apabila menggunakan unset, jika saya log current_query sebelum memanggil unset, saya mendapat objek kosong. Bagaimana ini boleh terjadi? </p>
<pre class="brush:php;toolbar:false;">on_applied_option_click(field){
console.log(this.current_query); // memberikan { ujian: 500 } (OK)
}, // Klik untuk tamat
on_applied_option_click(medan){
console.log(this.current_query); // Hanya apabila menggunakan _.unset, objek kosong akan diberikan (??)
_.unset(this.current_query, field);
console.log(this.current_query); // Juga akan memberikan objek kosong (OK)
}, // Klik untuk menamatkan</pre>
<p>Saya mendapati bahawa jika saya menggunakan <code>_.omit</code>, semuanya berfungsi dengan baik: </p>
<pre class="brush:php;toolbar:false;">on_applied_option_click(field){
console.log(this.current_query); // memberikan { ujian: 500 } (OK)
this.current_query = _.omit(this.current_query, field);
console.log(this.current_query); // Berikan objek kosong, yang OK pada masa ini
}, // Klik untuk menamatkan</pre>
<p>Kenapa? Satu-satunya perkara yang boleh saya katakan ialah _.unset menukar objek manakala _.omit mencipta objek baharu. Walau bagaimanapun, saya rasa tidak mungkin untuk _.unset menukar objek sebelum memanggilnya (???). Tidak pernah melihat perkara seperti ini. Adakah sesiapa mempunyai penjelasan yang baik untuk tingkah laku aneh ini? </p>
Jangan gunakan
console.log(this.current_query)
,尝试使用console.log(JSON.stringify(this.current_query))
。这样可以可靠地记录this.current_query
keadaan pada masa rakaman, bukannya beberapa keadaan kemudian.Ini sepatutnya menyelesaikan isu kekeliruan.