Кратко
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 — базовый набор для всех объектов.
Примеры
**Самый простой:**
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.
**Простой:**
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)Строки и числа имеют свои прототипы с методами.
**Реальный пример:**
// Проверка собственных 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')); // truehasOwnProperty различает собственные и унаследованные свойства.
Частые ошибки
**Неправильно:** Расширять встроенные прототипы
**Почему:** Конфликты с будущими стандартами, ломает другие библиотеки.
**Правильно:** Не расширяйте 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__ подробнее.