Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengekalkan Konteks 'ini' yang Betul dalam Panggilan Balik setTimeout?
Memelihara Konteks dalam setTimeout Panggilan Balik dengan "ini"
Apabila menggunakan setTimeout untuk menjadualkan panggilan balik selepas kelewatan, adalah perkara biasa untuk ingin mengakses konteks daripada fungsi di mana panggilan setTimeout dibuat. Walau bagaimanapun, adalah penting untuk mengetahui bahawa setTimeout melaksanakan panggilan balik dengan "ini" menunjuk ke objek global, yang boleh membawa kepada tingkah laku yang tidak dijangka jika panggilan balik anda merujuk kepada ahli contoh.
Untuk menyelesaikan isu ini, terdapat beberapa pendekatan:
1. Simpan Rujukan kepada Konteks:
Penyelesaian yang paling mudah ialah menyimpan rujukan kepada konteks yang betul sebelum memanggil setTimeout. Rujukan ini kemudiannya boleh dihantar ke fungsi panggil balik sebagai parameter.
var that = this; if (this.options.destroyOnHide) { setTimeout(function() { that.tip.destroy() }, 1000); }
2. Gunakan Kaedah bind (ES5):
Kaedah bind boleh digunakan untuk mencipta fungsi baharu yang mempunyai nilai "ini" yang telah ditentukan sebelumnya. Ini menghapuskan keperluan untuk menyimpan rujukan kepada konteks secara manual.
if (this.options.destroyOnHide) { setTimeout(function(){ this.tip.destroy() }.bind(this), 1000); }
3. Gunakan Fungsi Anak Panah (ES6):
Fungsi anak panah tidak mempunyai nilai "ini" sendiri. Sebaliknya, mereka mewarisi nilai "ini" daripada skop leksikal yang disertakan. Ini menjadikan mereka sesuai untuk mengekalkan konteks dalam panggilan balik.
if (this.options.destroyOnHide) { setTimeout(() => { this.tip.destroy() }, 1000); }
4. Lulus Konteks sebagai Argumen (ES5 ):
Dalam HTML5, anda boleh menghantar argumen kepada fungsi panggil balik setTimeout. Ini membolehkan anda menentukan secara eksplisit konteks yang akan digunakan.
if (this.options.destroyOnHide) { setTimeout(function(that){ that.tip.destroy() }, 1000, this); }
Dengan memahami pendekatan ini, anda boleh mengekalkan konteks yang betul dengan berkesan dalam panggilan balik setTimeout anda dan mengelakkan tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Konteks 'ini' yang Betul dalam Panggilan Balik setTimeout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!