Ja, dieses "böse" "this". Bezieht sich dan innerhalb der Funktion auf "sich", also auf den "Vater", den "Eigentümer" der Funktion, das Element (/Objekt, zu dem die Funktion gehört)?
Genau. this ist immer der Kontext, in dem die Funktion aufgerufen wurde.
Gabs da nicht aber so irgendwie kontraintuitiven "Krempel" auch im Zusammenhang mit "Closures" (und einen Artikel von Dir)? Irgendwie habe ich immer ein bissel "Angst" (;-) vor this. Weil plötzlich ist es dann nicht mehr da (natürlich nur, wenn man den Kontext verlassen hat).
Besser Respekt, keine Angst ;-)
Klar in Closures verliert sich der Kontext, daher wird er in der Regel einfach in einer lokalen Variabeln kopiert um ihn dann in der Funktion zu nutzen. Das Problem taucht gerne mal auf bei Eventhandler die in einer Klasse zugewiesen werden.
Falsch!
function MyClass(id) {
var elm = document.getElementById(id);
elm.onclick = function() { this.tu_was(); }; // this == elm
this.tu_was = function() { alert('hallo');};
}
Richtig:
function MyClass(id) {
var elm = document.getElementById(id);
var _this = this;
elm.onclick = function() { _this.tu_was(); };
this.tu_was = function() { alert('hallo');};
}
Struppi.