Mengendalikan Rujukan \'ini\' dalam Kaedah Prototaip dengan setInterval dan setTimeout: Apakah Penyelesaian?

Linda Hamilton
Lepaskan: 2024-10-18 15:03:30
asal
285 orang telah melayarinya

Handling

Mengendalikan Rujukan ini dalam Kaedah Prototaip dengan setInterval dan setTimeout

Dalam JavaScript, kaedah prototaip kehilangan perkaitan ini apabila diekstrak dan dihantar ke tempat lain. Pertimbangkan kod berikut:

function Foo() {}
Foo.prototype = {
  bar: function () {
    this.baz();
  },
  baz: function () {
    this.draw();
    requestAnimFrame(this.baz);
  }
};
Salin selepas log masuk

Kod ini gagal dengan ralat kerana ini tidak diikat dengan betul dalam setInterval atau setTimeout panggil balik.

Penyelesaian:

Terdapat beberapa cara untuk menangani isu ini:

Panggilan Kaedah Balut dalam Fungsi Tanpa Nama:

var that = this;
setInterval(function () {
  return that.baz();
}, 1000);
Salin selepas log masuk

Ini mengekalkan ini daripada fungsi luar menggunakan pemboleh ubah pembantu.

Panggilan Kaedah Balut dalam Fungsi Anak Panah Lemak:

setInterval(() => this.baz(), 1000);
Salin selepas log masuk

Fungsi tanpa nama anak panah lemak mengekalkan ini daripada fungsi sekeliling.

Gunakan Fungsi Mengikat:

setInterval(this.baz.bind(this), 1000);

// dojo toolkit example:
setInterval(dojo.hitch(this, 'baz'), 10);
Salin selepas log masuk

Fungsi pengikatan seperti Function.prototype.bind atau setara perpustakaan membolehkan anda mengikat konteks ini secara eksplisit.

Atas ialah kandungan terperinci Mengendalikan Rujukan \'ini\' dalam Kaedah Prototaip dengan setInterval dan setTimeout: Apakah Penyelesaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber: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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!