Skip to main content

toString() у функції

Що робить Function.prototype.toString()

Метод toString() повертає рядкове представлення вихідного коду функції.

Простіше кажучи - він перетворює функцію на рядок.


Приклад 1 - проста функція

javascript
function sum(a, b) { return a + b; } console.log(sum.toString());

Вивід:

javascript
"function sum(a, b) { return a + b; }"

Приклад 2 - стрілкова функція

javascript
const multiply = (a, b) => a * b; console.log(multiply.toString());

Вивід:

javascript
"(a, b) => a * b"

Приклад 3 - анонімна функція

javascript
console.log(function(x) { return x ** 2; }.toString());

Вивід:

javascript
"function (x) { return x ** 2; }"

Приклад 4 - вбудовані (native) функції

Якщо викликати toString() у вбудованої функції JavaScript (наприклад, Math.max), ти не побачиш вихідного коду, а отримаєш спеціальний рядок:

javascript
console.log(Math.max.toString());

Вивід:

javascript
"function max() { [native code] }"

Це означає, що функція реалізована на рівні рушія (C++), а не в JS.


Приклад 5 - у класів і методів

javascript
class User { sayHi() { console.log('Привіт!'); } } console.log(User.toString());

Вивід:

javascript
"class User { sayHi() { console.log('Привіт!'); } }"

Поведінка за стандартом (ECMAScript 2019+)

Раніше браузери повертали різний формат (могли прибирати пробіли, переноси тощо), але починаючи з ES2019 (ES10):

Function.prototype.toString() повертає точну текстову копію вихідного коду, включно з пробілами, коментарями і форматуванням.


Навіщо це потрібно

ВикористанняПриклад
НалагодженняМожна вивести вихідний код функції в консоль
Перевірка вмістуНаприклад, для аналізу чи серіалізації
МетапрограмуванняГенерація нових функцій "на основі" інших
Вбудовані інструментиДеякі фреймворки використовують toString() для отримання аргументів чи тіла функції (наприклад, Angular до ES6)

Приклад 6 - використання в метапрограмуванні

javascript
function greet(name) { return `Hello, ${name}`; } const src = greet.toString(); console.log(src); // вихідний код const copy = new Function('return ' + src)(); console.log(copy('Tim')); // Hello, Tim

Тут ми серіалізували функцію в рядок, а потім створили з нього нову через new Function.


Важливо пам'ятати

  1. toString() повертає вихідний код - не "скомпільований" варіант.
  2. Для вбудованих функцій повертається "[native code]".
  3. Для методів класів і генераторів формат відповідає оголошенню.
  4. Стрілкові функції і методи з => повертаються як є, без function.

Підсумок

Що робитьПовертає вихідний код функції у вигляді рядка
Тип поверненняstring
Працює зЗвичайними, стрілковими, методами, класами
Для вбудованих функційfunction ... { [native code] }
СтандартЗ ES2019 повертає точний вихідний текст
Часті застосуванняНалагодження, аналіз коду, метапрограмування

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.