Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Function.prototype.toString()
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
* Some parts of this feature may have varying levels of support.
DietoString()-Methode vonFunction-Instanzen gibt einen String zurück, der den Quellcode dieser Funktion repräsentiert.
In diesem Artikel
Probieren Sie es aus
function sum(a, b) { return a + b;}console.log(sum.toString());// Expected output: "function sum(a, b) {// return a + b;// }"console.log(Math.abs.toString());// Expected output: "function abs() { [native code] }"Syntax
toString()Parameter
Keine.
Rückgabewert
Ein String, der den Quellcode der Funktion repräsentiert.
Beschreibung
DasFunction-Objekt überschreibt dietoString()-Methode, die vonObject geerbt wurde; es erbt nichtObject.prototype.toString. Bei benutzerdefiniertenFunction-Objekten gibt dietoString-Methode einen String zurück, der das Quelltextsegment enthält, das zur Definition der Funktion verwendet wurde.
JavaScript ruft dietoString-Methode automatisch auf, wenn einFunction-Objekt als Textwert dargestellt werden soll, z. B. wenn eine Funktion mit einem String verkettet wird.
DietoString()-Methode wirft eineTypeError-Ausnahme ("Function.prototype.toString called on incompatible object"), wenn dasthis-Wertobjekt keinFunction-Objekt ist.
Function.prototype.toString.call("foo"); // throws TypeErrorWenn dietoString()-Methode auf eingebauten Funktionsobjekten, einer durchFunction.prototype.bind() erstellten Funktion oder anderen Nicht-JavaScript-Funktionen aufgerufen wird, gibttoString() einennative function string zurück, der aussieht wie
function someName() { [native code] }Bei intrinsischen Objektsmethoden und Funktionen istsomeName der anfängliche Name der Funktion; andernfalls kann der Inhalt implementierungsabhängig sein, wird jedoch immer in der Eigenschaftennamenssyntax sein, wie[1 + 1],someName oder1.
Hinweis:Das bedeutet, dass die Verwendung voneval() auf nativen Funktionsstrings garantiert einen Syntaxfehler darstellt.
Wenn dietoString()-Methode auf eine durch denFunction-Konstruktor erstellte Funktion aufgerufen wird, gibttoString() den Quellcode einer synthetisierten Funktionsdeklaration namens "anonymous" zurück, wobei die bereitgestellten Parameter und Funktionskörper verwendet werden. Zum Beispiel wirdFunction("a", "b", "return a + b").toString() folgendes zurückgeben:
function anonymous(a,b) {return a + b}Seit ES2018 verlangt die Spezifikation, dass der Rückgabewert vontoString() genau derselbe Quellcode ist, wie er deklariert wurde, einschließlich aller Leerzeichen und/oder Kommentare — oder, falls der Host den Quellcode aus irgendeinem Grund nicht verfügbar hat, muss ein nativer Funktionsstring zurückgegeben werden. Unterstützung für dieses überarbeitete Verhalten finden Sie in derKompatibilitätstabelle.
Beispiele
>Vergleich von tatsächlichem Quellcode und toString-Ergebnissen
function test(fn) { console.log(fn.toString());}function f() {}class A { a() {}}function* g() {}test(f); // "function f() {}"test(A); // "class A { a() {} }"test(g); // "function* g() {}"test((a) => a); // "(a) => a"test({ a() {} }.a); // "a() {}"test({ *a() {} }.a); // "*a() {}"test({ [0]() {} }[0]); // "[0]() {}"test(Object.getOwnPropertyDescriptor({ get a() {} }, "a").get); // "get a() {}"test(Object.getOwnPropertyDescriptor({ set a(x) {} }, "a").set); // "set a(x) {}"test(Function.prototype.toString); // "function toString() { [native code] }"test(function f() {}.bind(0)); // "function () { [native code] }"test(Function("a", "b")); // function anonymous(a\n) {\nb\n}Beachten Sie, dass nach der Überarbeitung vonFunction.prototype.toString() bei einem Aufruf vontoString() Implementierungen nie erlaubt sind, einen Funktionsquelltext zu synthetisieren, der kein nativer Funktionsstring ist. Die Methode gibt immer den exakten Quellcode zurück, der zur Erstellung der Funktion verwendet wurde — einschließlich der obigengetter- undsetter-Beispiele. DerFunction-Konstruktor selbst hat die Fähigkeit, den Quellcode für die Funktion zu synthetisieren (und ist daher eine Form von implizitemeval()).
Erhalten des Quelltexts einer Funktion
Es ist möglich, den Quelltext einer Funktion zu erhalten, indem man sie in einen String umwandelt — zum Beispiel, indem man sie in eine Template-Literal einfügt:
function foo() { return "bar";}console.log(`${foo}`);// function foo() {// return "bar";// }Dieser Quelltext istexakt, einschließlich aller eingefügten Kommentare (die ansonsten nicht von der internen Darstellung der Engine gespeichert werden).
function foo /* a comment */() { return "bar";}console.log(foo.toString());// function foo /* a comment */() {// return "bar";// }Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-function.prototype.tostring> |