Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengekalkan Konteks 'ini' dalam setTimeout Panggilan Balik?

Bagaimana untuk Mengekalkan Konteks 'ini' dalam setTimeout Panggilan Balik?

DDD
Lepaskan: 2024-12-26 16:15:09
asal
832 orang telah melayarinya

How to Preserve

Melalukan Konteks "ini" yang Betul untuk setTimeout Callback

Soalan:

Bagaimana boleh kami melaksanakan kaedah kelas dalam fungsi panggil balik setTimeout, mengekalkan konteks (iaitu, "ini") kelas?

Penjelasan Kontekstual:

Apabila menggunakan setTimeout, pembolehubah "ini" merujuk kepada objek global (tetingkap), yang bukan tingkah laku yang diingini apabila cuba mengakses sifat kelas atau kaedah.

Jawapan:

Kaedah 1: Menyimpan Rujukan Setempat

var that = this;
if (this.options.destroyOnHide) {
     setTimeout(function(){ that.tip.destroy() }, 1000);
}
Salin selepas log masuk

Kaedah 2: menggunakan bind()

if (this.options.destroyOnHide) {
     setTimeout(function(){ this.tip.destroy() }.bind(this), 1000);
}
Salin selepas log masuk

Kaedah 3: Menggunakan Fungsi Anak Panah (ES6)

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
Salin selepas log masuk

Kaedah 4: Menghantar Argumen ke setTimeout (HTML5)

if (this.options.destroyOnHide) {
     setTimeout(function(that){ that.tip.destroy() }, 1000, this);
}
Salin selepas log masuk

Bacaan Lanjut:

  • [setTimeout - Masalah 'ini'](https://qntm.org/blog/ 2009/05/masalah-ini)

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Konteks 'ini' dalam setTimeout Panggilan Balik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan