Ich habe versucht, meinen Code kleiner zu machen, indem ich Funktionen auf Variablen zwischenspeichert. Zum Beispiel:
%Vor% Also, anstatt Array.prototype.slice.call(arguments)
aufzurufen, kann ich einfach a.call(arguments);
machen.
Ich habe versucht, dies noch kleiner zu machen, indem ich Array.prototype.slice.call
zwischenspeichere, aber das hat nicht funktioniert.
Das gibt mir TypeError: object is not a function
. Warum ist das so?
typeof Array.prototype.slice.call
gibt "function"
zurück, wie erwartet.
Warum kann ich .call
nicht in einer Variablen speichern (und dann aufrufen)?
Versuchen Sie Folgendes:
%Vor%Derselbe Fehler tritt auf, wenn Sie versuchen, Folgendes zu tun:
%Vor% Der Grund dafür ist, dass Sie der Funktion x
(in meinem Beispiel log
) die Variable log
zuweisen. ABER Die Funktion enthält einen Aufruf von this
, der nun auf window
und nicht auf console
verweist, wodurch der Fehler this is not an object
Das Problem ist, dass call
eine Methode ist (eine Funktion, die zu einem Objekt gehört), die erwartet, dass ihr Besitzer (seine this
) eine Funktion ist. Wenn Sie a = Array.prototype.slice.call
schreiben, kopieren Sie die Funktion, aber nicht den Eigentümer.
Die Nachricht "object is not a function" besagt nicht, dass a
keine Funktion ist, sondern dass this
keine Funktion ist. Sie könnten technisch erreichen, was Sie beschreiben, indem Sie a.call(Array.prototype.slice, arguments)
schreiben, aber das ist natürlich nicht das, was Sie wollen!
Tags und Links javascript