Das Problem ist das von Kontext . Wenn Sie eine Objektfunktion auslösen, wird sie mit dem Objekt als Wert von this
ausgelöst (sofern Sie nichts anderes angeben). g = document.getElementById
setzt die Funktion getElementById
in die Variable g
, setzt aber den Kontext nicht.
Wenn Sie also g(someId)
ausführen, gibt es keinen Kontext, in dem die Funktion ausgeführt werden kann. Es wird mit dem globalen Objekt window
als Wert von this
ausgeführt, und das funktioniert nicht. (Um genau zu sein, es funktioniert nicht, weil Sie mit einem document
-Objekt arbeiten könnten, nicht nur mit window.document
, und Sie haben noch keins angegeben.)
Sie könnten dies mit call
umgehen, wo Sie den Kontext setzen:
Dies ist jedoch keine Verbesserung gegenüber dem Original!
Das Problem ist der Kontext . document.getElementById(xxx)
wird im Kontext von document
ausgeführt, aber wenn Sie etwas zuweisen, erhalten Sie einen TypeError, weil der Kontext wahrscheinlich window
ist. Siehe dieses jsFiddle: Ссылка
Also könnten Sie call
oder apply
verwenden, aber das ist hässlich. Tun Sie stattdessen die zweite Möglichkeit, oder weisen Sie sie document
zu und weisen Sie document
etwas zu, wenn Sie Ihren Code minimieren möchten.
@minitech und @Tim Down Vielen Dank für Ihr Feedback.
Wir haben eine Menge alten Code, der so funktioniert
%Vor%Es fehlgeschlagen mit Fehlermeldung in modernen Browsern Uncaught TypeError: Illegaler Aufruf
Alles, was ich getan habe, wurde als
ersetzt %Vor%Jetzt sind wir wieder im Spiel:)
Wie die Antwort von lonesomeday bereits zeigt, liegt das Problem im Ausführungskontext. Ich möchte hinzufügen, dass es eine Möglichkeit gibt, eine Funktion mit dem Ausführungskontext zu erstellen. Öffnen Sie die Entwicklertools Ihres Browsers für diese Seite und versuchen Sie Folgendes in der Konsole:
%Vor% Nach wie vor wird die Variable _d
, die document.getElementById
zugeordnet ist, direkt aufgerufen. Sie können jedoch Function.prototype.bind
verwenden, um den Ausführungskontext zu binden .
%Vor%Die
bind()
-Methode erstellt eine neue Funktion, deren this-Schlüsselwort beim Aufruf auf den angegebenen Wert gesetzt wird, wobei eine gegebene Argumentfolge vor allen angegebenen steht, wenn die neue Funktion aufgerufen wird.
Sie müssen sich auch nicht viel Gedanken über die Browserkompatibilität machen, wenn Sie bind
verwenden möchten: Siehe Ссылка .
Tags und Links javascript