| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Function/toString | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Die toString()-Methode von Function-Instanzen gibt einen String zurck, der den Quellcode dieser Funktion reprsentiert.
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] }"
toString()
Keine.
Ein String, der den Quellcode der Funktion reprsentiert.
Das Function-Objekt berschreibt die toString()-Methode, die von Object geerbt wurde; es erbt nicht Object.prototype.toString. Bei benutzerdefinierten Function-Objekten gibt die toString-Methode einen String zurck, der das Quelltextsegment enthlt, das zur Definition der Funktion verwendet wurde.
JavaScript ruft die toString-Methode automatisch auf, wenn ein Function-Objekt als Textwert dargestellt werden soll, z. B. wenn eine Funktion mit einem String verkettet wird.
Die toString()-Methode wirft eine TypeError-Ausnahme ("Function.prototype.toString called on incompatible object"), wenn das this-Wertobjekt kein Function-Objekt ist.
Function.prototype.toString.call("foo"); // throws TypeError
Wenn die toString()-Methode auf eingebauten Funktionsobjekten, einer durch Function.prototype.bind() erstellten Funktion oder anderen Nicht-JavaScript-Funktionen aufgerufen wird, gibt toString() einen native function string zurck, der aussieht wie
function someName() { [native code] }
Bei intrinsischen Objektsmethoden und Funktionen ist someName der anfngliche Name der Funktion; andernfalls kann der Inhalt implementierungsabhngig sein, wird jedoch immer in der Eigenschaftennamenssyntax sein, wie [1 + 1], someName oder 1.
Hinweis:
Das bedeutet, dass die Verwendung von eval() auf nativen Funktionsstrings garantiert einen Syntaxfehler darstellt.
Wenn die toString()-Methode auf eine durch den Function-Konstruktor erstellte Funktion aufgerufen wird, gibt toString() den Quellcode einer synthetisierten Funktionsdeklaration namens "anonymous" zurck, wobei die bereitgestellten Parameter und Funktionskrper verwendet werden. Zum Beispiel wird Function("a", "b", "return a + b").toString() folgendes zurckgeben:
function anonymous(a,b
) {
return a + b
}
Seit ES2018 verlangt die Spezifikation, dass der Rckgabewert von toString() genau derselbe Quellcode ist, wie er deklariert wurde, einschlielich aller Leerzeichen und/oder Kommentare oder, falls der Host den Quellcode aus irgendeinem Grund nicht verfgbar hat, muss ein nativer Funktionsstring zurckgegeben werden. Untersttzung fr dieses berarbeitete Verhalten finden Sie in der Kompatibilittstabelle.
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 von Function.prototype.toString() bei einem Aufruf von toString() Implementierungen nie erlaubt sind, einen Funktionsquelltext zu synthetisieren, der kein nativer Funktionsstring ist. Die Methode gibt immer den exakten Quellcode zurck, der zur Erstellung der Funktion verwendet wurde einschlielich der obigen getter- und setter-Beispiele. Der Function-Konstruktor selbst hat die Fhigkeit, den Quellcode fr die Funktion zu synthetisieren (und ist daher eine Form von implizitem eval()).
Es ist mglich, den Quelltext einer Funktion zu erhalten, indem man sie in einen String umwandelt zum Beispiel, indem man sie in eine Template-Literal einfgt:
function foo() {
return "bar";
}
console.log(`${foo}`);
// function foo() {
// return "bar";
// }
Dieser Quelltext ist exakt, einschlielich aller eingefgten 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";
// }
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-function.prototype.tostring |
FunctionObject/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |