Как работают методы прототипов на примитивах
Разбор вопроса «Как работают методы прототипов на примитивах» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Как работают методы прототипов на примитивах
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает механизм работы методов у примитивов в JavaScript, включая концепцию автоупаковки и временных объектов-обёрток. Важно показать понимание разницы между примитивами и объектами в JS.
Ключевые тезисы
- Примитивы (string, number, boolean) не являются объектами, но при обращении к их методам JS временно оборачивает их в объекты-обёртки (String, Number, Boolean), чтобы вызвать методы прототипа.
- После выполнения метода временный объект удаляется, и мы снова работаем с примитивом. Это называется "автоупаковкой" (autoboxing).
- Например, при вызове 'str'.toUpperCase() создаётся временный объект String, вызывается метод, возвращается результат, а объект уничтожается.
- Это объясняет, почему мы можем использовать методы у примитивов, хотя технически они не являются объектами.
Подробный ответ
В JavaScript примитивы, такие как строки, числа и булевы значения, не являются объектами. Однако, когда мы пытаемся вызвать метод у примитива, JavaScript временно оборачивает его в соответствующий объект-обёртку (например, String, Number или Boolean). Этот процесс называется автоупаковкой (autoboxing). После вызова метода временный объект удаляется, и мы снова работаем с примитивом. Это позволяет использовать методы прототипов у примитивов, хотя технически они не являются объектами. Например, при вызове 'str'.toUpperCase(), JavaScript создаёт временный объект String, вызывает метод toUpperCase(), возвращает результат, а затем уничтожает временный объект. Это объясняет, почему мы можем использовать методы у примитивов, хотя они не являются объектами. Однако, важно отметить, что примитивы не могут иметь собственных методов, так как они не являются объектами и не могут хранить свойства. Если попытаться присвоить свойство примитиву, оно будет проигнорировано или удалено после завершения операции.
Практические примеры
Пример 1
Пример с использованием метода toUpperCase() у строки: const str = 'hello'; console.log(str.toUpperCase()); // Output: 'HELLO'Пример 2
Пример с использованием метода toString() у числа: const num = 42; console.log(num.toString()); // Output: '42'Пример 3
Пример с попыткой присвоить свойство примитиву: const str = 'hello'; str.customProperty = 'value'; console.log(str.customProperty); // Output: undefinedЧастые ошибки
- Попытка добавить собственные методы в прототипы примитивов, что невозможно, так как примитивы не являются объектами.
- Ожидание, что свойства, присвоенные примитиву, сохранятся, хотя они будут проигнорированы или удалены.
Связанные темы
- Прототипы и наследование в JavaScript
- Объекты-обёртки в JavaScript
- Автоупаковка (autoboxing) в JavaScript
Follow-up вопросы
Какие методы прототипов доступны для строк?
Уровень: basic
Для строк доступны методы, такие как toUpperCase(), toLowerCase(), slice(), indexOf(), replace() и другие, которые определены в прототипе объекта String.
Можно ли добавить собственные методы в прототипы примитивов?
Уровень: intermediate
Да, можно расширять прототипы примитивов, например, добавив метод в String.prototype, но это считается плохой практикой, так как может привести к конфликтам и неожиданным побочным эффектам.
Как работает автоупаковка при использовании методов у чисел?
Уровень: intermediate
При вызове методов у чисел, например, toFixed(), JavaScript временно оборачивает число в объект Number, чтобы вызвать метод, после чего объект уничтожается, и мы снова работаем с примитивом.
Почему примитивы не могут иметь собственных методов?
Уровень: advanced
Примитивы не являются объектами и не имеют свойств или методов. Однако JavaScript автоматически оборачивает их в объекты при вызове методов, чтобы использовать методы их прототипов.
Что произойдёт, если попытаться присвоить свойство примитиву?
Уровень: advanced
JavaScript временно обернёт примитив в объект, присвоит свойство, но после этого объект будет удалён, и свойство будет потеряно. Это не вызовет ошибки, но и не будет иметь эффекта.
Из чего состоит HTTP протокол
Разбор вопроса «Из чего состоит HTTP протокол» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Какие знаешь типы HTTP-запросов
Разбор вопроса «Какие знаешь типы HTTP-запросов» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.