Heim  >  Artikel  >  Web-Frontend  >  Warum verhält sich „dies' in JavaScript-Ereignishandlern unerwartet?

Warum verhält sich „dies' in JavaScript-Ereignishandlern unerwartet?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 02:44:021027Durchsuche

 Why Does

Das mehrdeutige „dies“ innerhalb von Event-Handlern

Bei der Arbeit mit JavaScript ist es üblich, Event-Handler mit der Methode addEventListener zu erstellen. Beim Versuch, innerhalb dieser Handler auf Objekteigenschaften zuzugreifen, tritt jedoch ein eigenartiges Verhalten auf: „this“ bezieht sich nicht auf das Objekt, sondern auf das Element, das das Ereignis ausgelöst hat.

Problemszenario

Betrachten Sie den folgenden Code, der dieses Problem veranschaulicht:

function ticketTable(ticks) {
  this.tickets = ticks;
}

ticketTable.prototype.render = function(element) {
  // Render table...
  cell1.addEventListener("click", this.handleCellClick, false);
};

ticketTable.prototype.handleCellClick = function() {
  // "this" refers to the clicked cell element, not the ticketTable object
  // ...
};

In der Funktion handleCellClick würde der Zugriff auf this.tickets fehlschlagen, da „this“ auf die angeklickte Zelle und nicht auf die TicketTable-Instanz verweist.

Lösung: Bind verwenden

Um dieses Problem zu lösen, können wir die Bind-Methode verwenden, die es uns ermöglicht, den Wert von „this“ für eine bestimmte Funktion explizit zu definieren .

function ticketTable(ticks) {
  this.tickets = ticks;
}

ticketTable.prototype.render = function(element) {
  // Render table...
  cell1.addEventListener("click", this.handleCellClick.bind(this), false);
};

Durch die Verwendung von bind(this) stellen wir sicher, dass „this“ beim späteren Aufruf der handleCellClick-Funktion korrekt auf das TicketTable-Objekt verweist, sodass wir auf dessen Eigenschaften wie this.tickets zugreifen können .

Alternative Lösungen

Alternative Ansätze umfassen neben bind auch die Verwendung einer Event-Handler-Funktion, die explizit für die Verwendung von „this“ (nicht der onclick-Eigenschaft) definiert ist, oder die Erstellung eines speziellen handleEvents Funktion zur Verarbeitung aller Ereignisse.

Das obige ist der detaillierte Inhalt vonWarum verhält sich „dies' in JavaScript-Ereignishandlern unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn