PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Как методы появляются у примитива?

Основы языка

Методы появляются у примитива через временную объектную обёртку: при обращении к методу движок оборачивает примитив в объект-обёртку (String, Number, Boolean), вызывает метод и уничтожает обёртку.

Как это работает

Примитивы (string, number, boolean) сами по себе не имеют методов, но у них есть объектные обёртки (String, Number, Boolean). При вызове метода:

'hello'.toUpperCase();
  1. Движок создаёт временный объект-обёртку new String('hello').
  2. Вызывает метод обёртки (toUpperCase).
  3. Возвращает результат.
  4. Уничтожает обёртку.

Примитив остаётся примитивом — обёртка временная.

Обёртки

  • String — методы строк (toUpperCase, slice, includes).
  • Number — методы чисел (toFixed, toString).
  • Boolean — обёртка для булевых.
  • Symbol, BigInt — тоже имеют обёртки.

null и undefined обёрток не имеют — у них нет методов.

Прототип обёртки

Методы лежат в прототипе обёртки (String.prototype), и примитив «одалживает» их через временную обёртку:

'text'.length;              // через String.prototype
String.prototype.custom = function () {}; // добавит метод всем строкам

Нюансы

Не путать примитив и объект-обёртку:

typeof 'text';              // 'string' (примитив)
typeof new String('text');  // 'object' (обёртка — не использовать явно)

Коротко для собеседования

Методы у примитива появляются через временную объектную обёртку: при вызове метода движок оборачивает примитив (String/Number/Boolean), вызывает метод из прототипа обёртки и уничтожает её. Примитив остаётся примитивом. null/undefined обёрток не имеют. Явно new String() не используют (это объект, не примитив).

Другие вопросы раздела