Wie man JavaScript-caller-Funktion die Zeilennummer? Wie man JavaScript Anrufer Quell-URL?
Ich bin mit dem folgenden für immer die JavaScript-Funktion Anrufer-name:
var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")
Gibt es eine Möglichkeit zu entdecken, die Nummer der Zeile, von der aus die Methode aufgerufen wurde?
Außerdem ist es ein Weg, um den Namen der JavaScript-Datei die Methode aufgerufen wurde? Oder die Quell-URL?
Ich glaube nicht, dass dies möglich ist, im IE, sonst hätten wir einen Weg, um zu bekommen es BESCHISSEN Fehlermeldungen, liefern keine Details. Aber wenn es möglich ist würde ich gerne wissen, wie gut!
Ja. Hier ist ein cross-browser-Funktion, die macht die Verwendung der einzelnen Browser' proprietäre Methoden: github.com/eriwen/javascript-stacktrace [Feste Verbindung]
Ja. Hier ist ein cross-browser-Funktion, die macht die Verwendung der einzelnen Browser' proprietäre Methoden: github.com/eriwen/javascript-stacktrace [Feste Verbindung]
InformationsquelleAutor Tal | 2009-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser funktioniert bei mir in chrome/QtWebView
Brauchen nicht zu werfen, den Fehler, einfach zu erstellen ist es genug:
var caller_line = (new Error).stack.split("\n")[4]
ich danke Ihnen sehr, ich war auf der Suche nach diesem zu ersetzen Argumente.angerufene.Anrufer, die wird null, auf chrome 25
Zusammengeführt diesen Vorschlag mit einen anderen, ähnlichen Antwort zu bekommen, eine FF/Webkit "standardisierte" Antwort -- siehe stackoverflow.com/a/14841411/1037948
Umgekehrt ist in einigen Browsern wie iOS safari Sie tun müssen, um die Ausnahmen! Also warum nicht tun Sie es?
InformationsquelleAutor Nathan Landis
kangax, der die Lösung bringt ein unnötiges try..catch-Bereich. Wenn Sie brauchen, um Zugriff auf die Nummer der Zeile, der etwas in JavaScript (wie lange, wie Sie mit Firefox oder Opera), Zugang nur
(new Error).lineNumber
.Dies ist angekreuzt, aber nicht die Frage beantworten, die ist, wie man die Nummer der Zeile, die caller-Funktion.
Auch dies ist äußerst begrenzt. Die beste Lösung ist, einen Fehler auslösen, und verwenden Sie die regex auf den Fehler.Stapel, die verfügbar ist in allen modernen Browsern. Sie können leicht extrahieren, Pfad, Datei, Zeile und Spalte. Kein problem.
InformationsquelleAutor Eli Grey
War ich überrascht, dass die meisten dieser Antworten davon ausgegangen, dass Sie wollte, um einen Fehler zu behandeln, anstatt nur die Ausgabe hilfreiche debug-Spuren für den normalen Fällen.
Zum Beispiel, ich mag mit einem
console.log
wrapper wie diese:Endet dies drucken eine Ausgabe wie die folgende für meine Konsole:
1462567104174 [getAllPosts@http://me.com/helper.js:362:9]
Sehen https://stackoverflow.com/a/27074218/ und auch Einen richtigen wrapper für die console.log mit richtige Nummer?
funktioniert für firefox-browser, aber es funktioniert nicht node.js.
InformationsquelleAutor Ryan
Oft geschieht dies durch das werfen einer Fehlermeldung aus dem aktuellen Kontext; dann analysieren von Fehler-Objekt für Eigenschaften wie
lineNumber
undfileName
(die von einigen Browsern)Vergessen Sie nicht, dass
callee.caller
Eigenschaft ist veraltet (und war nie wirklich in ECMA 3rd ed. in den ersten Platz).Denken Sie auch daran, dass die Funktion eine Dekompilierung ist, angegeben werden Implementierung abhängig und so könnte durchaus unerwartete Ergebnisse. Ich schrieb über es hier und hier.
Sie sollten in der Lage sein zu überprüfen error-Objekt, ohne sich auf veraltete
callee.caller
.Sie müssen nicht werfen Sie den Fehler. Verwenden Sie einfach (neue Fehler).lineNumber Zugriff auf die aktuelle Zeilennummer in einem Skript.
Das ist, was ich sehe, in FF3. WebKit, auf der anderen Seite, füllt
line
nur wenn der Fehler geworfen wird.Was ist der Ersatz für den angerufenen.Anrufer ? Wenn ich brauche, um den Namen der Funktion?
InformationsquelleAutor kangax
Es scheint, ich bin ein bisschen spät :), aber die Diskussion ist ziemlich interessant, so.. hier geht es... Vorausgesetzt, Sie wollen bauen einen error-handler, und Sie sind mit Ihrem eigenen exception-handler-Klasse wie:
Und Sie ' re wickeln Sie Ihren code wie folgt:
Wahrscheinlich haben Sie den Fehler-handler in einem separaten .js-Datei.
Werden Sie feststellen, dass in firefox oder chrome Fehler Konsole die code-Zeile, die Anzahl(und Namen) gezeigt haben, ist die Zeile(Datei), wirft den 'Fehler' Ausnahme und nicht die 'errorHandler' Ausnahme wich, die Sie wirklich wollen, um zu machen das Debuggen leicht. Werfen Sie Ihre eigenen Ausnahmen ist groß, aber bei großen Projekten Ihre Lokalisierung kann durchaus ein Problem sein, vor allem, wenn Sie ähnliche Meldungen. Also, was Sie tun können, ist, übergeben Sie einen Verweis auf eine tatsächlich leere Error-Objekt nach der Fehlerbehandlung, und das Bezug genommen wird, halten alle Informationen, die Sie möchten( zum Beispiel in firefox können Sie den Dateinamen und die Zeilennummer etc.. ; in Chrom bekommt man etwas ähnliches, wenn Sie Lesen, der 'stack' - Eigenschaft des Error-Instanz).
Lange Geschichte kurz , können Sie etwas wie das hier tun:
Nun können Sie die eigentliche Datei und die Zeilennummer, die throwed Sie benutzerdefinierte Ausnahme.
InformationsquelleAutor rusu bogdan
Zeilennummer ist eigentlich etwas statisches, also, wenn Sie nur wollen, dass es für die Anmeldung dann könnte es vorverarbeitet werden mit so etwas wie gulp. Ich habe geschrieben einen kleinen Schluck plugin, die macht genau das:
Diese wird befestigen Sie den Namen der Datei und Zeile, um alle logs in der Konsole.log, so
console.log(something)
wirdconsole.log('filePath:fileNumber', something)
. Der Vorteil ist, dass jetzt können Sie die concat-Dateien, transpile Sie... und erhalten Sie noch die ZeileInformationsquelleAutor Gabriel Furstenheim
Wenn Sie möchten, um zu wissen, die Nummer der Zeile, für debugging-Zwecke oder nur während der Entwicklung (Für einen oder anderen Grund, können Sie Firebug (eine Firefox-Erweiterung) und werfen eine Ausnahme.
Bearbeiten:
Wenn Sie wirklich tun müssen, in der Produktion aus irgendeinem Grund, Sie können pre-Prozess für javascript-Dateien in Reihenfolge für jede Funktion, um zu verfolgen, welche Zeile es ist. Ich kenne einige frameworks finden Sie die Abdeckung des Codes, benutzen Sie diesen (wie JSCoverage).
Zum Beispiel, sagen wir, Ihre original-Aufruf:
Könnten Sie schreiben, einen Präprozessor zu machen, in:
Dann in
y()
könnten Siearguments.callee.caller.line
zu wissen, die Linie, von denen es hieß, wie:InformationsquelleAutor Sinan Taifour
Hier ist was ich geschrieben habe basiert auf info finden Sie auf in diesem forum:
Dies ist Teil eines MyDebugNamespace, Debug ist scheinbar reserviert und nicht als namespace-Namen.
...
...
Wie zu nennen:
Habe ich zwei Funktionen mit variabler Anzahl von Argumenten aufrufen dieser Basis-code im my-namespace, so wie Optional weglassen Nachricht oder einen Fehler in den aufrufen.
Diese funktioniert einwandfrei mit Firefox, IE6 und Chrome melden Sie den Dateinamen und die lineNumber als undefined.
InformationsquelleAutor pasx
folgende code funktioniert bei mir im Mozilla und Chrome.
Seiner log-Funktion, die zeigt, dass der name der Datei und die Zeile des Anrufers.
SyntaxError: function statement requires a name,log: function (arg) {
Ich mag diese Idee, aber die Zeilennummern kommen falsche für mich.
InformationsquelleAutor Noampz
Mein Beitrag, um benutzerdefinierte Fehler in JavaScript:
Erstens, ich Stimme mit diesem @B T Kerl an Erben von der Fehler-Objekt - wo ist die message-Eigenschaft?, wir haben gebaut, es richtig (eigentlich ist man ein js-Objekt-Bibliothek, mein Favorit: https://github.com/jiem/my-class):
dann sollten wir definieren eine Globale Fehlerbehandlung (optional) oder Sie werden am Ende bis auf den Motor:
schließlich sollten wir werfen unsere benutzerdefinierte Fehler gezielt:
Nur, wenn die Weitergabe den Dritten parameter als
new Error()
sind wir in der Lage, um zu sehen, der stack-Funktion und line-Nummern!Bei 2, die Funktion kann auch mit Fehler ausgelöst, indem der Motor als gut.
Natürlich, die eigentliche Frage ist, ob wir es wirklich brauchen und wenn; es gibt Fälle (99% meiner Meinung nach), wo eine anmutige Rückkehr von
false
ist genug und verlassen, nur einige kritische Punkte gezeigt, mit der geworfen der eine Fehler.Beispiel: http://jsfiddle.net/centurianii/m2sQ3/1/
InformationsquelleAutor centurian
Dies ist, wie ich es getan haben, ich habe es getestet in Firefox und Chrome. Dies macht es möglich, überprüfen Sie den Dateinamen und die Zeilennummer des Ortes, wo die Funktion aufgerufen wird.
InformationsquelleAutor Dilshan Liyanage
Ich weiß, das ist eine alte Frage, aber es gibt jetzt eine Methode namens
console.trace("Message")
wird zeigen, dass Sie die Nummer der Zeile und die Kette der Methodenaufrufe, die led in das Protokoll zusammen mit der Nachricht, die Sie übergeben. Mehr info auf javascript-Protokollierung tricks gibt hier bei freecodecamp und dieses medium blog-postInformationsquelleAutor Japheth Ongeri - inkalimeva
Antworten sind einfach. Nein und Nein (No).
Durch die Zeit, die javascript ausgeführt wird, das Konzept der Quell-Dateien/urls, von denen das kommen ist gegangen.
Gibt es auch keine Möglichkeit zu bestimmen, eine Linie, Reihe, da wieder die Zeit der Ausführung wird der Begriff " code "Zeilen" ist nicht mehr sinnvoll in Javascript.
Bestimmten Implementierungen können vorsehen, API-hooks zu ermöglichen privilegierten code Zugang zu solchen details, die für die Zwecke der Fehlerbeseitigung, aber diese APIs sind nicht ausgesetzt zu gewöhnlichen standard-Javascript-code.
Beim starten von MS Script debugger, und legte einige Haltepunkt, sehen Sie in der call-stack, wo genau Sie gekommen sind. Dies wird durch spezielle Haken?
"wieder durch den Zeitpunkt der Ausführung, der Begriff" code "Zeilen" ist nicht mehr sinnvoll in Javascript." Huh? JS zeigt bereits die Nummer der Zeile, jedesmal, wenn Sie ausführen Konsole.log()
haben Sie Lesen Sie den letzten Absatz?
Ja. Es ordentlich, widerspricht dem etwas absolutes 'No und No (Nein).'
InformationsquelleAutor AnthonyWJones
Bestimmen, welche Zeile etwas auf, Sie Suche den code für den code, der sich in der Linie von Interesse und die Anzahl der "\n" Zeichen von oben, um das Interesse und add 1.
Ich bin eigentlich genau das, was in einer Anwendung, die ich Schreibe. Es ist ein best-practices-validator für HTML und ist immer noch stark in der Entwicklung, aber die error-Ausgabe-Prozess, dass Sie interessiert wäre, ist abgeschlossen.
http://mailmarkup.org/htmlint/htmlint.html
Sie sind nicht in der Lage sein, zu analysieren, JavaScript-interpretation bei der Ausführung von außerhalb der Dolmetscher. Man könnte ein Programm schreiben, das trace der Ausführungspfad in Ihrem Programm, aber es wäre, dass das Programm ausgeführt wird und nicht der code, den Sie analysieren möchten. Dies ist in der Regel eine komplizierte Aufgabe, die manuell durchgeführt mit Hilfe von Werkzeugen. Wenn Sie wirklich wollen, um zu sehen, was Los ist in Ihrem code, wie es ausführt, dann haben Sie es schreiben meta-Daten des Bildschirms, die sagt, Sie wollen Entscheidungen ausführen, die die anderen Teile.
InformationsquelleAutor
Wird es zeigen Ihnen die ganze Spur.
InformationsquelleAutor MSTRmt