JS Intermediate

Встроенные прототипы

Понять, что все встроенные объекты (Array, Object, String, Number) имеют свои прототипы с полезными методами.

Средний (Intermediate)

Кратко

Array.prototype содержит map, filter, reduce. Object.prototype содержит toString, hasOwnProperty. String.prototype содержит trim, includes. Все эти методы доступны благодаря прототипной цепочке.


Подробно

Встроенные прототипы:

Array.prototype:

  • map, filter, find, reduce, forEach, some, every, flat, flatMap, sort, reverse, includes, indexOf, findIndex, join, slice, splice, at

Object.prototype:

  • toString, hasOwnProperty, isPrototypeOf, valueOf

String.prototype:

  • trim, includes, startsWith, endsWith, slice, replace, split, repeat, padStart, padEnd

Number.prototype:

  • toFixed, toPrecision, toString, isFinite, isInteger

Boolean.prototype:

  • toString, valueOf

Цепочка: [] → Array.prototype → Object.prototype → null 'hello' → String.prototype → Object.prototype → null 42 → Number.prototype → Object.prototype → null

Расширение встроенных прототипов: // ПЛОХАЯ практика! Array.prototype.last = function() { return this[this.length - 1]; };

Почему плохо:

  • Конфликты с будущими стандартами
  • Ломает другие библиотеки
  • Неочевидно для других разработчиков

Ментальная модель

Встроенные прототипы — как набор инструментов в ящике. Array.prototype — ящик инструментов для массивов. Object.prototype — базовый набор для всех объектов.


Примеры

**Самый простой:**

javascript
const arr = [1, 2, 3];
console.log(arr.__proto__ === Array.prototype); // true
console.log(Array.prototype.map); // function
console.log([].map); // function (из Array.prototype)

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

**Простой:**

javascript
const str = '  Hello World  ';
console.log(str.trim()); // 'Hello World' (из String.prototype)
console.log(str.includes('World')); // true

const num = 3.14159;
console.log(num.toFixed(2)); // '3.14' (из Number.prototype)

Строки и числа имеют свои прототипы с методами.

**Реальный пример:**

javascript
// Проверка собственных vs унаследованных свойств:
const arr = [1, 2, 3];

console.log(arr.hasOwnProperty('length')); // true (собственное)
console.log(arr.hasOwnProperty('map'));    // false (унаследованное)

// Modern alternative:
console.log('map' in arr); // true (включая прототипы)
console.log(Object.hasOwn(arr, 'length')); // true

hasOwnProperty различает собственные и унаследованные свойства.


Частые ошибки

**Неправильно:** Расширять встроенные прототипы

**Почему:** Конфликты с будущими стандартами, ломает другие библиотеки.

**Правильно:** Не расширяйте Array.prototype, Object.prototype и т.д.

**Неправильно:** Путать собственные и унаследованные свойства

**Почему:** 'map' in [] — true, но map определён в Array.prototype, не в самом массиве.

**Правильно:** hasOwnProperty различает собственные свойства.

**Неправильно:** Думать, что prototype — это свойство экземпляра

**Почему:** prototype — свойство ФУНКЦИИ. Экземпляр имеет [[Prototype]].

**Правильно:** F.prototype — для функции. obj.__proto__ — для экземпляра.


Важно запомнить

  • Array.prototype — методы массивов
  • Object.prototype — базовые методы объектов
  • String.prototype — методы строк
  • Не расширяйте встроенные прототипы
  • hasOwnProperty различает собственные и унаследованные

Связь

Назад: Вы знаете F.prototype (JI14) — теперь вы видите встроенные прототипы.

Вперёд: Следующий урок (JI16) — прототипные методы и __proto__ подробнее.

Материалы курса JS Intermediate — PROlab Academy.