Перейти к содержанию
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
Логотип бренда
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Прототипы в JavaScript: встроенные объекты и обёртки для примитивов

Прототипы в JavaScript: встроенные объекты и обёртки для примитивов

Запланировано Прикреплена Закрыта Перенесена JavaScript
javascript
1 Сообщения 1 Постеры 11 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • evoE Не в сети
    evoE Не в сети
    evo
    javascript
    написал отредактировано
    #1

    В JavaScript всё (почти) — объект, и у каждого объекта может быть прототип — другой объект, из которого он наследует свойства и методы.

    Представь: если у объекта нет нужного метода — он смотрит в свой прототип. Если и там нет — идёт дальше по цепочке. Это называется цепочкой прототипов.


    1. Встроенные прототипы объектов

    У встроенных конструкторов (вроде Object, Array, Function) есть прототипы, где хранятся общие методы.

    Например:

    Array.prototype

    Все массивы наследуют методы от Array.prototype:

    let arr = [1, 2, 3];
    arr.push(4); // метод push взят из Array.prototype
    

    То есть:

    arr.__proto__ === Array.prototype // true
    

    Аналогично:

    • Object.prototype — база для всех объектов
    • String.prototype — содержит toUpperCase(), slice() и др.
    • Number.prototype, Function.prototype и т.д.

    💡 Эти прототипы позволяют всем объектам одного типа использовать одни и те же методы.


    2. Прототипы объектов-обёрток для примитивов

    Тут становится интереснее.

    Примитивы — это не объекты:
    string, number, boolean, null, undefined, symbol, bigint

    Но... почему у строки есть методы вроде .toUpperCase()?

    "hello".toUpperCase(); // "HELLO"
    

    Строка — примитив, а метод вызывается как у объекта. Как?


    Магия: объекты-обёртки

    Когда вы вызываете метод на примитиве, JavaScript временно оборачивает его в объект.

    Пример со строкой:

    "hello".toUpperCase();
    

    JS делает нечто вроде:

    new String("hello").toUpperCase();
    

    → Создаётся временный объект-обёртка,
    → вызывается метод из String.prototype,
    → результат возвращается,
    → объект удаляется.

    Такие обёртки есть для:

    • String — для строк
    • Number — для чисел
    • Boolean — для булевых значений

    Пример:

    let str = "hi";
    console.log(str.length); // 2
    
    // str — примитив, но JS делает: new String(str).length
    

    Но если попробовать добавить свойство к примитиву — оно не сохранится:

    str.test = "привет";
    console.log(str.test); // undefined — потому что обёртка уничтожена
    

    Разница между примитивом и объектом:

    let str1 = "hello";           // примитив
    let str2 = new String("hello"); // объект-обёртка
    
    typeof str1; // "string"
    typeof str2; // "object"
    
    str1 == str2; // true (сравнение по значению)
    str1 === str2; // false (разные типы)
    

    👉 Всегда используй примитивы. Объекты-обёртки — это внутренний механизм, а не инструмент для кода.


    Итог:

    Что Объяснение
    Встроенные прототипы Array.prototype, String.prototype и др. — хранят методы, которые используют все объекты этого типа
    Цепочка прототипов Объект ищет метод сначала у себя, потом в __proto__, потом выше — до Object.prototype
    Обёртки для примитивов new String, new Number, new Boolean — временные объекты, которые позволяют вызывать методы на строках, числах и булевых значениях
    Но! Примитивы — не объекты. Обёртки создаются автоматически и исчезают после использования
    • Прототипы — основа наследования в JS.
    • Методы у строк и чисел работают благодаря временным объектам-обёрткам.
    • Не создавай new String() или new Number() вручную — это плохая практика.
    1 ответ Последний ответ
    0
    • evoE evo переместил эту тему из Языки программирования

    • evoE

      Что такое функция замыкания в JavaScript

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      10 Просмотры
      Нет ответов
    • evoE

      Что такое JSON и как использовать JSON.stringify и JSON.parse

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript json
      1
      0 Голоса
      1 Сообщения
      10 Просмотры
      Нет ответов
    • evoE

      Что такое массив в JavaScript и как использовать методы

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      13 Просмотры
      Нет ответов
    • evoE

      Объект Date в JavaScript — как с ним работать

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      10 Просмотры
      Нет ответов
    • evoE

      Что такое объект и что является его значением

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      11 Просмотры
      Нет ответов
    • evoE

      Как привести типы boolean, string, number друг в друга.

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      11 Просмотры
      Нет ответов
    • evoE

      Все типы данных в javascript

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      11 Просмотры
      Нет ответов
    • evoE

      Использование import & export синтаксис

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена JavaScript javascript
      1
      0 Голоса
      1 Сообщения
      6 Просмотры
      Нет ответов

    Контакты

    • forum@eduity.ru

    © 2025 eduity.ru, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы