Function.prototype.toString()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и версий браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод toString() объекта Function возвращает строку, представляющую исходный код этой функции.
Попробуйте
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()
Параметры
Нет.
Возвращаемое значение
Строка, представляющая исходный код функции.
Описание
Объект Function переопределяет метод toString(), унаследованный от Object; он не наследует Object.prototype.toString. Для пользовательских объектов Function метод toString возвращает строку, содержащую сегмент исходного текста, который использовался для определения функции.
JavaScript автоматически вызывает метод toString, когда Function должен быть представлен в виде текстового значения, например, при конкатенации функции со строкой.
Метод toString() вызовет исключение TypeError ("Function.prototype.toString called on incompatible object"), если объект значения его this не является объектом Function.
Function.prototype.toString.call("foo"); // throws TypeError
Если метод toString() вызывается для встроенных объектов функций, функции, созданной с помощью Function.prototype.bind(), или других не-JavaScript функций, то toString() возвращает строку нативной функции, которая выглядит следующим образом:
function someName() { [native code] }
Для внутренних методов и функций объекта someName — это начальное имя функции; в противном случае его содержимое может быть определено реализацией, но всегда будет в синтаксисе именования свойств, например [1 + 1], someName или 1.
Примечание: Это означает, что использование eval() для строк нативных функций гарантированно приведет к ошибке синтаксиса.
Если метод toString() вызывается для функции, созданной конструктором Function, toString() возвращает исходный код сгенерированного объявления функции с именем "anonymous", используя предоставленные параметры и тело функции. Например, Function("a", "b", "return a + b").toString() вернет:
function anonymous(a,b
) {
return a + b
}
Начиная с ES2018, спецификация требует, чтобы возвращаемое значение toString() было точно таким же исходным кодом, как оно было объявлено, включая любые пробелы и/или комментарии — или, если хост по какой-либо причине не имеет исходного кода, требуется возврат строки нативной функции. Поддержка этого измененного поведения представлена в таблице совместимости.
Примеры
Сравнение фактического исходного кода и результатов toString
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}
Обратите внимание, что после пересмотра Function.prototype.toString(), при вызове toString(), реализациям никогда не разрешается генерировать исходный код функции, который не является строкой нативной функции. Метод всегда возвращает точный исходный код, использованный для создания функции — включая примеры getter и setter выше. Сам конструктор Function имеет возможность генерировать исходный код для функции (и, следовательно, является формой неявного eval()).
Получение исходного текста функции
Можно получить исходный текст функции, приведя ее к строке — например, обернув ее в шаблонный литерал:
function foo() {
return "bar";
}
console.log(`${foo}`);
// function foo() {
// return "bar";
// }
Этот исходный текст является точным, включая любые вставленные комментарии (которые в противном случае не будут сохранены во внутреннем представлении движка).
function foo /* a comment */() {
return "bar";
}
console.log(foo.toString());
// function foo /* a comment */() {
// return "bar";
// }
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
toString |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
toString_revision |
66 |
79 |
54 |
53 |
17 |
66 |
54 |
47 |
17 |
9.0 |
66 |
17 |
1.0.0 |
1.0 |
Нет |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString