Und ich vermute, der Haupt-Anwendungsfall ist dieser hier:
https://github.com/jquery/jquery/blob/2.1.0/test/unit/ajax.js#L151-L183
Im Fehlerfall nimmt man die Settings und gibt sie einfach nochmal an jQuery.ajax().
Mag sein, aber intuitiv finde ich das nicht.
Den context-Kram zumindest würde ich nicht als Interna bezeichnen.
Wieso nicht? Wenn du meinst, daß es ja explizit in der Doku steht, gebe ich dir recht.
Sonst ist aber der context eines Callbacks von außen nicht ersichtlich, wenn man ihn nicht selbst von außen festlegt.
Ich hätte das mit einem weiteren Parameter für den Callback gelöst. Ansonsten kommt man, wenn man this sinnvoll setzt, nicht an die Settings.
Warum nicht? Die liegen (hier und im unittestfall) im Scope des Callbacks.
jQuery setzt an vielen Stellen this auf irgendein obskures Objekt.
Ja, gut, aber irgendwo müssen sie ihr Callback ja speichern. Wenn sie sich über das wo noch Gedanken machen und das auch dokumentieren finde ich das in Ordnung.
Ich hätte in diesem Fall nicht das Optionobjekt genommen, aber das ist nur meine Meinung.
In fast allen Fällen würde ich davon abraten, es zu nutzen.
Kommt darauf an, hier hätte ich es auch nicht verwendet. Hinzu kommt meistens auch noch deine nächste Bemerkung:
Bei der Objektorientierten Programmierung will man meist selbst this verwenden, um das aktuelle Objekt zu referenzieren.
Aber abraten, wenn der Defaultcontext definiert ist? Warum?
$('#foo').on('click', function(event) {
alert(this); // Pfui
alert(event.currentTarget); // Pendant
alert(event.target); // Manchmal will man auch das
});
Klar, event.currentTarget ist viel intuitiver, in der Doku ist es auch nur angedeutet(als Beispiel), oder ich habe es wieder übersehen, aber warum pfui?
> ~~~javascript
// Ja, das ist die Parameterreihenfolge! Bei Array#forEach,
> // Array#some usw. sowie in allen vernünftigen Sprachen und Bibliotheken ist sie umgekehrt.
> $('.foo').each(function(index, element) {
> alert(this); // Pfui
> alert(element); // Pendant
> });
this ist element? Ja, daß finde ich auch merkwürdig, wie hier das Optionobjekt.
Hier kann man es dummerweise nicht vermeiden:
$('.foo').filter(function(index) {
alert(this); // Das Elementobjekt
});
Naja, vermeiden schon, du hast den index und ein Array. Aber hier steht es sogar wieder explizit in der Doku.
Du hast aber recht, hier gehört das Element als Parameter an die Funktion.
> jQuery ist in dieser Hinsicht ziemlich kaputt.
Was heißt kaputt? Soweit ich das jetzt sehe, haben die sich tatsächlich bei jedem Callback gedanken über den Context gemacht.
Ich hatte ja anfangs vermutet, der ist hier zufällig das Optionobjekt geworden, weil sie das Callback zufällig an diesem gespeichetrt haben.
Aber dein oben erwähnter Haupt-Anwendungsfall macht ja durchaus Sinn, auch wenn ich das nicht unbedingt schön finde.
Wenn du meinst, der Context ist von außen ohne Doku sowieso nicht ersichtlich und man hätte diesen von daher besser aufs global object gesetzt, dann bin ich bei dir.