Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «toString() у функції». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`Function.prototype.toString()`** повертає рядкове представлення вихідного коду функції - тобто перетворює функцію на рядок. **Ключове:** починаючи з ES2019, метод повертає точну текстову копію вихідного коду, включно з пробілами, коментарями і форматуванням, а для вбудованих функцій повертає `"[native code]"`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що робить `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 повертає точний вихідний текст | | Часті застосування | Налагодження, аналіз коду, метапрограмування |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.