0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В прототипе объектов JavaScript есть один "магический метод" Object.prototype.toString(). Магический он потому, что он вызывается автоматически в тех местах, где объект используется как строка. Такое регулярно происходит во время разработки, мы все видели надписи наподобие этой: '[object Object]'.</p>
1
<p>В прототипе объектов JavaScript есть один "магический метод" Object.prototype.toString(). Магический он потому, что он вызывается автоматически в тех местах, где объект используется как строка. Такое регулярно происходит во время разработки, мы все видели надписи наподобие этой: '[object Object]'.</p>
2
<p>Для чего же он нужен? В веб-разработке объекты часто приводятся к строке, например, при выводе на экран пользователю или при передаче данных между разными приложениями. Представьте себе список чего-либо, например, список курсов на Хекслете. Вывод имени каждого курса может быть сделан так:</p>
2
<p>Для чего же он нужен? В веб-разработке объекты часто приводятся к строке, например, при выводе на экран пользователю или при передаче данных между разными приложениями. Представьте себе список чего-либо, например, список курсов на Хекслете. Вывод имени каждого курса может быть сделан так:</p>
3
<p>Но если определить toString(), то код упрощается:</p>
3
<p>Но если определить toString(), то код упрощается:</p>
4
<p>Преимущество здесь не только в более короткой записи, но и в том, что разных вариантов вывода, как правило, много. Даже когда мы занимаемся отладкой, нам нужен вывод в лог. Во всех этих ситуациях наличие toString() упрощает работу, так как не нужно явно преобразовывать объекты к строке. Кроме того, в будущем достаточно изменить ровно одно место, чтобы вывод поменялся во всех местах.</p>
4
<p>Преимущество здесь не только в более короткой записи, но и в том, что разных вариантов вывода, как правило, много. Даже когда мы занимаемся отладкой, нам нужен вывод в лог. Во всех этих ситуациях наличие toString() упрощает работу, так как не нужно явно преобразовывать объекты к строке. Кроме того, в будущем достаточно изменить ровно одно место, чтобы вывод поменялся во всех местах.</p>
5
<p>Сам по себе toString() не является чем-то особенным, это обычный метод в прототипе. А раз так, то мы можем переопределить его:</p>
5
<p>Сам по себе toString() не является чем-то особенным, это обычный метод в прототипе. А раз так, то мы можем переопределить его:</p>
6
<p>То же самое можно сделать и в прототипе любого конструктора:</p>
6
<p>То же самое можно сделать и в прототипе любого конструктора:</p>
7
<p>Но что делать, если нужно вывести объект "как есть"? Такое бывает нужно для анализа внутренней структуры. Если у этого объекта не определен toString(), то мы получим максимально неинформативный вывод [object Object]. В таком случае можно конвертировать объект в JSON:</p>
7
<p>Но что делать, если нужно вывести объект "как есть"? Такое бывает нужно для анализа внутренней структуры. Если у этого объекта не определен toString(), то мы получим максимально неинформативный вывод [object Object]. В таком случае можно конвертировать объект в JSON:</p>
8
8