toString() у функції
Що робить Function.prototype.toString()
Метод toString() повертає рядкове представлення вихідного коду функції.
Простіше кажучи - він перетворює функцію на рядок.
Приклад 1 - проста функція
function sum(a, b) {
return a + b;
}
console.log(sum.toString());Вивід:
"function sum(a, b) {
return a + b;
}"Приклад 2 - стрілкова функція
const multiply = (a, b) => a * b;
console.log(multiply.toString());Вивід:
"(a, b) => a * b"Приклад 3 - анонімна функція
console.log(function(x) { return x ** 2; }.toString());Вивід:
"function (x) { return x ** 2; }"Приклад 4 - вбудовані (native) функції
Якщо викликати toString() у вбудованої функції JavaScript (наприклад, Math.max),
ти не побачиш вихідного коду, а отримаєш спеціальний рядок:
console.log(Math.max.toString());Вивід:
"function max() { [native code] }"Це означає, що функція реалізована на рівні рушія (C++), а не в JS.
Приклад 5 - у класів і методів
class User {
sayHi() {
console.log('Привіт!');
}
}
console.log(User.toString());Вивід:
"class User {
sayHi() {
console.log('Привіт!');
}
}"Поведінка за стандартом (ECMAScript 2019+)
Раніше браузери повертали різний формат (могли прибирати пробіли, переноси тощо), але починаючи з ES2019 (ES10):
Function.prototype.toString()повертає точну текстову копію вихідного коду, включно з пробілами, коментарями і форматуванням.
Навіщо це потрібно
| Використання | Приклад |
|---|---|
| Налагодження | Можна вивести вихідний код функції в консоль |
| Перевірка вмісту | Наприклад, для аналізу чи серіалізації |
| Метапрограмування | Генерація нових функцій "на основі" інших |
| Вбудовані інструменти | Деякі фреймворки використовують toString() для отримання аргументів чи тіла функції (наприклад, Angular до ES6) |
Приклад 6 - використання в метапрограмуванні
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.
Важливо пам'ятати
toString()повертає вихідний код - не "скомпільований" варіант.- Для вбудованих функцій повертається
"[native code]". - Для методів класів і генераторів формат відповідає оголошенню.
- Стрілкові функції і методи з
=>повертаються як є, безfunction.
Підсумок
| Що робить | Повертає вихідний код функції у вигляді рядка |
|---|---|
| Тип повернення | string |
| Працює з | Звичайними, стрілковими, методами, класами |
| Для вбудованих функцій | function ... { [native code] } |
| Стандарт | З ES2019 повертає точний вихідний текст |
| Часті застосування | Налагодження, аналіз коду, метапрограмування |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.