Hallo dedlfix,
ich dachte, dass bind() vielleicht eine Altlast sei, aber nein, sie ist in ECMAScript 5 hinzugekommen.
Deshalb habe ich mal das Nashorn gefragt, und da steht, dass bind() mehr kann als ein eigener Wrapper.
Ein eigener bind-Wrapper kann this festlegen und partielle Applikation ausführen (einen Teil der Parameter vorgeben). An der Stelle kann er mehr als bind, weil man so beliebige Parameter vorgeben kann, nicht unbedingt nur die ersten. Die zurückgegebene Funktion hat, da sie im eigenen Wrapper für den konkreten Zweck definiert wird, eine korrekte Stelligkeit (was laut LEO die Übersetzung für arity sein soll).
- ein Polyfill für bind hat mit korrekter Stelligkeit Schwierigkeiten, weil man die Stelligkeit einer selbsterstellten Funktion nicht variabel setzen kann. Man müsste für jede Stelligkeit eine eigene Funktion im Polyfill vorhalten. Das eingebaute bind löst das irgendwie.
- Man kann Konstruktorfunktionen bind()-en und sie für den new Operator verwenden. Das erzeugte Objekt hat den Prototypen des gebundenen Konstruktors, und verweist mit dem constructor-Property auch darauf. Das natürlich nur im Zusammenhang mit partieller Applikation (festlegen der ersten Parameter) sinnvoll.
- Ein gebundener Konstruktor ist für den
instanceof
Operator von einem ungebundenen nicht zu unterscheiden.
Das sind aber alles Randfälle und vermutlich hauptsächlich für Libraries wichtig.
Rolf
--
sumpsi - posui - obstruxi
sumpsi - posui - obstruxi