Und selbst wenn es aus dem Code ersichtlich wäre, ist es nicht dokumentiert. Und was in einer API nicht dokumentiert ist, ist nicht für die Benutzung gedacht.
Es ist durchaus hier erwähnt, im Rahmen des context-Settings:
http://api.jquery.com/jQuery.ajax/
»context
Type: PlainObject
This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax). [Dann wird erklärt, wie man den Kontext selbst setzen kann.]«
Der Default-Fall ist auch durchaus getestet:
https://github.com/jquery/jquery/blob/2.1.0/test/unit/ajax.js#L409-L421
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().
Den context-Kram zumindest würde ich nicht als Interna bezeichnen.
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.
jQuery setzt an vielen Stellen this auf irgendein obskures Objekt. In fast allen Fällen würde ich davon abraten, es zu nutzen. Und meistens kann man es auch.
Bei der Objektorientierten Programmierung will man meist selbst this verwenden, um das aktuelle Objekt zu referenzieren. Dazu werden die Callback-Funktionen gebunden.
Stellen in jQuery, wo man this vermeiden sollte:
$('#foo').on('click', function(event) {
alert(this); // Pfui
alert(event.currentTarget); // Pendant
alert(event.target); // Manchmal will man auch das
});
// 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
});
Hier kann man es dummerweise nicht vermeiden:
$('.foo').filter(function(index) {
alert(this); // Das Elementobjekt
});
jQuery ist in dieser Hinsicht ziemlich kaputt.
</threaddrift>
Mathias