Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengekalkan Konteks `ini` dalam `setInterval()` JavaScript?

Bagaimana untuk Mengekalkan Konteks `ini` dalam `setInterval()` JavaScript?

DDD
Lepaskan: 2024-12-05 18:25:11
asal
216 orang telah melayarinya

How to Preserve the `this` Context in JavaScript's `setInterval()`?

Memelihara Rujukan 'ini' dalam Pengendali setInterval JavaScript

Apabila bekerja dengan fungsi setInterval() JavaScript, adalah perkara biasa untuk menemui "ini" masalah. Ini berlaku apabila anda perlu mengakses sifat atau kaedah objek dari dalam fungsi pengendali selang.

Pertimbangkan kod berikut:

prefs: null,
startup: function() {
  // init prefs
  ...
  this.retrieve_rate();
  this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL);
},

retrieve_rate: function() {
  var ajax = null;
  ajax = new XMLHttpRequest();
  ajax.open('GET', 'http://xyz.example', true);
  ajax.onload = function() {
    // access prefs here
  }
}
Salin selepas log masuk

Dalam contoh ini, kami ingin mengakses sifat prefs dari dalam fungsi pengendali ajax.onload. Walau bagaimanapun, ini tidak berfungsi seperti yang dijangkakan kerana rujukan ini hilang dalam pengendali selang.

Untuk menyelesaikan masalah ini, anda boleh menggunakan kaedah bind() untuk mencipta fungsi baharu yang mengikat rujukan ini. Begini caranya:

this.intervalID = setInterval(this.retrieve_rate.bind(this), this.INTERVAL);
Salin selepas log masuk

Dengan menggunakan bind(), kami mencipta fungsi baharu yang mempunyai rujukan ini terikat pada objek asal (ini). Ini memastikan bahawa sifat prefs dirujuk dengan betul dalam pengendali ajax.onload.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Konteks `ini` dalam `setInterval()` JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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