Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah Saya Boleh Mengekalkan Konteks dalam Panggilan Balik Pengendali Acara dalam JavaScript?

Bagaimanakah Saya Boleh Mengekalkan Konteks dalam Panggilan Balik Pengendali Acara dalam JavaScript?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 04:22:02637semak imbas

How Can I Preserve Context in Event Handler Callbacks in JavaScript?

Memelihara Konteks dalam Panggilan Balik Pengendali Acara: Teknik 'self = this'

Dalam JavaScript, kaedah contoh sebagai panggilan balik pengendali acara boleh menyebabkan skop perubahan. Seperti yang ditunjukkan oleh kod yang disediakan, pengikatan peristiwa memerlukan pembolehubah untuk mengekalkan konteks panggilan, yang membawa kepada tugasan "var self = this".

Walaupun berfungsi, pendekatan ini menimbulkan kebimbangan tentang keberkesanannya. Penyelesaian yang lebih umum menangani masalah teras: menyalurkan pembolehubah dalam fungsi terbenam.

Dalam JavaScript, penutupan membenarkan akses kepada pembolehubah luaran. Walau bagaimanapun, pembolehubah pseudo seperti "ini" dan "argumen" memerlukan pengendalian yang teliti. Menetapkan mereka kepada alias dalam fungsi induk memastikan ketersediaannya dalam fungsi terbenam.

Contoh

Untuk menggunakan "ini" dalam fungsi terbenam, tetapkan ia kepada pembolehubah dan gunakan alias sebaliknya:

var that = this;

function xyz() {
  // "this" is different here! --- but we don't care!
  console.log(that); // now it is the right object!
  
  function qwe() {
    // "this" is different here too! --- but we don't care!
    console.log(that); // it is the right object here too!
  }
  ...
};

Pendekatan ini tidak terhad kepada "ini"; "argumen" memerlukan layanan yang sama untuk memastikan akses yang konsisten dalam fungsi terbenam.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Konteks dalam Panggilan Balik Pengendali Acara dalam JavaScript?. 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