Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengawal Nilai \'ini\' dalam Pengendali Acara Menggunakan `addEventListener`?

Bagaimanakah Saya Boleh Mengawal Nilai \'ini\' dalam Pengendali Acara Menggunakan `addEventListener`?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 05:38:30278semak imbas

 How Can I Control the Value of

Nilai "ini" dalam Pengendali Menggunakan addEventListener

Apabila menggunakan kaedah addEventListener untuk mengendalikan acara, nilai "ini" dalam fungsi pengendali boleh punca kekeliruan. Secara lalai, "ini" merujuk kepada elemen yang menimbulkan acara. Walau bagaimanapun, terdapat teknik untuk mengubah suai tingkah laku ini dan memastikan "ini" merujuk kepada objek yang diingini.

Dalam contoh khusus anda dengan objek Jadual tiket, isu timbul dalam fungsi handleCellClick. Apabila dipanggil sebagai pengendali acara, "ini" menunjuk kepada elemen yang menerima acara klik, bukan objek Jadual tiket.

Untuk menyelesaikan masalah ini, anda boleh menggunakan kaedah bind, yang membolehkan anda menentukan nilai daripada "ini" untuk fungsi tertentu. Dengan mengikat "ini" pada objek Jadual tiket, anda boleh memastikan bahawa "ini" merujuk objek yang betul dalam fungsi handleCellClick. Berikut ialah versi terkini kod anda yang menunjukkan perkara ini:

<code class="js">ticketTable.prototype.render = function(element) {
  // ...

  // Bind "this" to ticketTable object for handleCellClick function
  cell1.addEventListener("click", this.handleCellClick.bind(this), false);

  // ...
}

ticketTable.prototype.handleCellClick = function() {
  // Now, "this" references the ticketTable object within the handler
  alert(this.tickets.length);
}</code>

Dengan mengikat "ini" pada objek Jadual tiket, anda boleh mengakses sifat dan kaedahnya dalam fungsi handleCellClick, seperti yang dimaksudkan.

Sebagai alternatif, anda boleh menggunakan fungsi handleEvent untuk menangkap sebarang acara dan mentakrifkan nilai "ini" secara eksplisit:

<code class="js">ticketTable.prototype.handleEvent = function(event) {
  switch (event.type) {
    case "click":
      // "this" references the ticketTable object
      alert(this.tickets.length);
      break;
    // ...
  }
}</code>

Dalam kes ini, "ini" akan sentiasa merujuk kepada objek Jadual tiket semasa mengendalikan acara, tanpa mengira elemen yang membangkitkan acara.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengawal Nilai \'ini\' dalam Pengendali Acara Menggunakan `addEventListener`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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