Warum werden bestimmte Funktionsaufrufe in JavaScript als "illegale Aufrufe" bezeichnet?
Zum Beispiel, wenn ich dies tun:
var q = document.querySelectorAll;
q('body');
Bekomme ich einen "Illegalen Aufrufs" Fehler in Chrome. Ich kann nicht aus irgendeinem Grund denken, warum dies notwendig ist. Zum einen, es ist nicht der Fall mit allen native-code-Funktionen. In der Tat kann ich dies tun:
var o = Object; //which is a native code function
var x = new o();
Und alles funktioniert gut. Insbesondere habe ich entdeckt, dieses problem beim Umgang mit dem Dokument und der Konsole. Irgendwelche Gedanken?
Kommentar zu dem Problem - Öffnen
möglich, Duplikat der Warum kann man nicht einen alias zu dokumentieren.getElementById()?
mögliche Duplikate von JavaScript-Funktion aliasing scheint nicht zu funktionieren
Exakte Kopie von "Uncaught TypeError: Illegal invocation" in Chrome
InformationsquelleAutor der Frage user1152187 | 2012-05-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist, weil Sie verloren haben, den "Kontext" der Funktion.
Wenn Sie anrufen:
Kontext die Funktion ist
document
und zugänglich sein wird, alsthis
durch die Implementierung der Methode.Wenn Sie rufen einfach
q
es ist nicht mehr ein Kontext - es ist die "Globale"window
Objekt statt.Die Umsetzung der
querySelectorAll
versuchtthis
aber es ist nicht mehr ein DOM-element, es ist einWindow
Objekt. Die Umsetzung versucht, rufen Sie eine Methode, mit der ein DOM-element, das nicht existiert, auf einemWindow
Objekt und der Dolmetscher wenig überraschend fordert foul.Um dies zu beheben, verwenden Sie
.bind
in neueren Versionen von Javascript:denen sichergestellt wird, dass alle nachfolgenden Aufrufe von
q
haben den richtigen Kontext. Wenn Sie nicht haben.bind
, verwenden Sie diese:InformationsquelleAutor der Antwort Alnitak
können Sie verwenden, wie diese :
InformationsquelleAutor der Antwort love-for-coding
Kann es passieren das für viele Grund, eine der häufigste Grund ist, dass Sie etwas rufen, das sowohl variable und Funktion.
so, in diesem Fall ist es nicht klar, welche "changeTime" wir fordern, die variable oder Funktion, daher "illegalen Aufrufs".
InformationsquelleAutor der Antwort meisam
In meinem Fall Illegaler Aufruf aufgetreten, durch die Weitergabe nicht deklarierte variable an die Funktion als argument.
Stellen Sie sicher, zu deklarieren, die Variablen vor der übergabe an die Funktion.
InformationsquelleAutor der Antwort Fawad