2017-09-28 1 views
1

Ich habe eine Funktion wie:Equivalent von ‚this‘ innerhalb Lambda-Funktion

$(".myDropdown").hover(function() { 
    $(this).find(".myDropdown-caretDown").hide(); 
}, function() { 
    $(this).find(".myDropdown-caretDown").show(); 
}); 

Wenn ich will, für Hover-Callback-Lambda-Funktion nutzen, Was kann ich anstelle von this benutzen?

+2

'this' innerhalb Pfeil Funktion ist das gleiche Objekt wie' this' im Bereich, der den Pfeil Funktion – Igor

+1

Eine der wichtigsten Ideen der Pfeil Funktion definiert ist, dass 'this' wird nicht vom übergeordneten Kontext neu definiert. Wenn Sie 'this' brauchen, verwenden Sie keine Pfeilfunktionen. – arbuthnott

+4

@Igor Ich glaube, deshalb stellt OP die Frage. OP, meine Frage ist einfach ... * warum? * Warum gehst du aus dem Weg, etwas zu tun, das mehr Arbeit erfordert und ist nicht für diesen Zweck gedacht? Wenn ich ein Projekt verfolgte und sah, dass jemand Pfeilfunktionen für Ereignisbindungen verwendete, würde ich mir die Haare ausreißen. – Santi

Antwort

3

this innerhalb Pfeil Funktion ist die gleiche Aufgabe wie this im Rahmen, der diese Funktion definiert:

$(".myDropdown").hover(
    e => $(e.target).find(".myDropdown-caretDown").hide(), 
    ... 
}); 
+0

Für dieses spezielle Beispiel kann ich Ereignis verwenden, aber im Allgemeinen kann ich Lambda-Funktion nicht verwenden? – Mhd

+1

"kann Lambda-Funktion nicht verwenden" - für was? – Igor

+0

Verwenden Sie die Lambda-Funktion und erhalten Sie Zugriff auf 'this', das sich auf diese Funktion bezieht. – Mhd

1

Was kann ich statt dessen verwenden?

Verwenden event.target

$(".myDropdown").hover('click', (event) => { 
    $(event.currentTarget).find(".myDropdown-caretDown").hide(); 
    },(event) => { 
    $(event.currentTarget).find(".myDropdown-caretDown").show(); 
    },); 
+0

Im Allgemeinen kann ich Lambda-Funktion nicht verwenden, wenn ich 'this' der lokalen Funktion brauche? – Mhd

+1

@Mhd mit * lamda function *, der Geltungsbereich von 'this' wird durch das Objekt definiert, das diese * lamda-Funktion * definiert. In Ihrem Fall wird es also zu der Funktion gehören, die diesen Hover-Event-Handler definiert. – gurvinder372

Verwandte Themen