molily: Arrays als Argumentenlisten - die [[Function]]-methode "apply".

Beitrag lesen

Hallo,

OK, die "emulieren" also quasi ein prototype-ähnliches Verhalten(?) - Methode einmal an einem Objekt definieren, und dann kann man sie für jedes Objekt (dieses Typs) aufrufen, in dem man this "austauscht"?

Peter hat hier apply eher kreativ zweckentfremdet. Es geht nicht darum, eine Methode im Kontext eines fremden Objektes auszuführen (d.h. this auszutauschen).

c = a.without.apply(null, b); tauscht this nicht aus, weil als erster Parameter null übergeben wird (*).

b wird einfach als arguments-Array für die Methode a.without gesetzt. In dem Aufruf von a.without ist also arguments gleich b. Wenn man arguments durchläuft, durchläuft man also b.

(*) Was ich mich allerdings frage:
»If thisArg is null or undefined, the called function is passed the global object as the this value.« (ECMAScript)
this (=== a) wird also durchaus ausgetauscht durch window. Dann frage ich mich, wie man in without auf a zugreift, wenn nicht über this. Es müsste also eher a.without.apply(a, b); lauten. Wobei ich es ebenfalls vorziehen würde, eine Methode zu schreiben, die sowohl Arrays als auch Skalare annimmt. Dann gibt es keine zwei Aufrufarten und man muss bei der Anwendung überhaupt nicht drauf achten, welche Typen die Argumente haben.

Mathias