関数呼び出し前にオブジェクトを変更するにはどうすればよいですか?これは本当に可能でしょうか?
P粉539055526
2023-08-30 15:10:19
<p>非常に奇妙な js の問題があります。 Vue コンポーネントがあります (ただし、ここでは Vue は重要ではないと思います)。これには、<code>current_query</code> というデータ属性があります。イベントに応答するメソッドで、プロパティを変更したいと思います。ここではロダッシュを使用します。非常に奇妙な動作があります。 <code>this.current_query</code> が最初は <code>{ test: 500 }</code> に等しいと仮定します。 <code>'field'</code> パラメータが <code>'test'</code> であると仮定します。 <code>current_query</code> から「設定を解除」すると、実際には current_query 自体がクリアされます。とても良い。問題は、unset を使用する場合にのみ、unset を呼び出す前に current_query をログに記録すると、空のオブジェクトが取得されることです。どうすればいいの? </p>
<pre class="brush:php;toolbar:false;">on_applied_option_click(field){
console.log(this.current_query); // { test: 500 } を返します (OK)
}, // クリックして終了
on_applied_option_click(フィールド){
console.log(this.current_query); // _.unset を使用する場合にのみ、空のオブジェクトが与えられます (??)
_.unset(this.current_query, フィールド);
console.log(this.current_query); // 空のオブジェクトも返されます (OK)
}, // クリックして終了</pre>
<p><code>_.omit</code> を使用すると、すべて正常に動作することがわかりました。</p>
<pre class="brush:php;toolbar:false;">on_applied_option_click(field){
console.log(this.current_query); // { test: 500 } を返します (OK)
this.current_query = _.omit(this.current_query, フィールド);
console.log(this.current_query); // 空のオブジェクトを指定しますが、現時点ではこれで問題ありません
}, // クリックして終了</pre>
<p>なぜですか?唯一言えることは、_.unset はオブジェクトを変更し、_.omit は新しいオブジェクトを作成するということです。ただし、_.unset がオブジェクトを呼び出す前に変更することは不可能だと思います (???)。このようなことは見たことがありません。この奇妙な動作についてうまく説明できる人はいますか? </p>
console.log(this.current_query)
を使用せず、console.log(JSON.stringify(this.current_query))
を使用してみてください。これにより、将来の状態ではなく、記録時のthis.current_query
の状態が確実に記録されます。これで混乱の問題は解決されるはずです。