JavaScript bind.apply , wie geht das?

this = thisArg passiert im Grunde auch, aber eben nicht innerhalb von apply, sondern im Falle von myFn.bind.apply() innerhalb von bind. Und apply() gibt hier das erste arg im array and bind als thisArg, was wiederum ein this = thisArg (was hier dem ersten arg entspricht) in myFn macht.

Das thisArg, dass du an apply(thisArg) übergibst, gilt nicht für myFn sondern für bind.

Noch ein Versuch:

Wenn du function myFn(arg1, arg2, arg3) {} hast und dann `myFn.apply({ foo: 'bar' }, [1, 2, 3]) machst... Was hat arg1,2,3 ?

Und jetzt übertrage das auf bind.apply(myFn, [{ foo: 'bar' }, 1, 2, 3]). Mit welchen Parametern wird bind aufgerufen?
 
Zuletzt bearbeitet:
Ich hätte gesagt bind wird so aufgerufen -> bind([{foo: 'bar'}, 1, 2, 3])
Sprich das ganz Array wird als this gesetzt. Aber anscheinend wird es ja so aufgerufen? ->
bind({ foo: 'bar' }, 1, 2, 3)
Aber warum wird nun das Array nicht als ganzes als arg1 übergeben sondern jedes Element einzeln? Als ob das Array gespreaded wird? Bind kann ja beliebig viele Argumente entgegennehmen, also warum nicht ein einzelnes Array?
 
Weil apply so spezifiziert ist.
Ein Array ähnliches Objekt, welches die Argumente spezifiziert, welche beim Aufruf von func benutzt werden

Wenn du das Array als ganzes an arg1 übergeben willst, musst du .apply({ foo }, [[1, 2, 3]]) schreiben.
 
Ok, für mich fehlt halt der explizite Hinweis, dass das array-like object aufgedröselt wird und jedes Element einzeln übergeben wird.

Kapiert habe ich es aber nun (denke ich :D )

Vielen Dank für deine Geduld :daumen:
 
  • Gefällt mir
Reaktionen: Bagbag
Zurück
Oben