Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menghantar Konteks dengan Betul kepada Panggilan Balik `setTimeout`?
Lepas Konteks ke setTimeout Panggilan Balik
Mengirim konteks yang betul ke setTimeout panggil balik boleh menjadi mencabar, terutamanya apabila bekerja dengan kaedah objek. Pada mulanya, apabila merujuk perkara ini dalam panggilan balik, ia sering membawa kepada objek global digunakan.
Untuk menyelesaikannya, terdapat beberapa pendekatan:
1. Simpan Rujukan (ES5 dan Terdahulu):
var that = this; if (this.options.destroyOnHide) { setTimeout(function() { that.tip.destroy() }, 1000); }
Teknik ini menggunakan pembolehubah sementara (itu) untuk menyimpan konteks dari mana setTimeout dipanggil.
2 . Kaedah bind (ES5 dan Kemudian):
if (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }.bind(this), 1000); }
Kaedah bind mencipta fungsi baharu dengan nilai ini yang dipratakrifkan. Dalam kes ini, ini ditetapkan kepada objek sebelum memanggil setTimeout.
3. Fungsi Anak Panah (ES6 dan Kemudian):
if (this.options.destroyOnHide) { setTimeout(() => { this.tip.destroy() }, 1000); }
Fungsi anak panah mewarisi konteks leksikalnya ini, yang sama dengan objek yang memanggil setTimeout. Ini menghapuskan keperluan untuk mengikat atau menyimpan ini.
4. Melepasi Argumen kepada setTimeout (HTML5):
if (this.options.destroyOnHide) { setTimeout(function(that) { that.tip.destroy() }, 1000, this); }
HTML5 memperkenalkan ciri dalam setTimeout yang membenarkan menghantar argumen tambahan kepada panggilan balik. Di sini, ini diluluskan sebagai hujah dan diakses dalam fungsi panggil balik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Konteks dengan Betul kepada Panggilan Balik `setTimeout`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!