Вопрос проверяет понимание прототипного наследования в JavaScript и того, как методы массива наследуются через прототип.
В JavaScript каждый объект имеет скрытую ссылку на свой прототип. Для массивов, созданных через литерал [], прототипом является Array.prototype. Именно там определены все методы работы с массивами: push, pop, map, filter и другие.
Когда вы выводите массив в консоль, отображаются только собственные свойства объекта. Методы находятся в прототипе, поэтому они не показываются в списке свойств массива. Однако их можно увидеть, если обратиться к свойству __proto__ или использовать Object.getPrototypeOf().
const arr = [1, 2, 3];
console.log(arr); // [1, 2, 3] - методы не видны
console.log(arr.__proto__); // Array.prototype - тут все методы
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
// Проверка наличия метода
console.log('push' in arr); // true - метод найден в прототипе
console.log(arr.hasOwnProperty('push')); // false - это не собственное свойствоПри вызове arr.push(4) JavaScript сначала ищет свойство push в самом объекте arr. Не найдя его, он переходит к прототипу Array.prototype и находит метод там. Если бы метод не был найден и там, поиск продолжился бы по цепочке прототипов до Object.prototype.
Понимание прототипного наследования важно для эффективной работы с JavaScript. Это позволяет экономить память, так как методы хранятся в одном месте и используются всеми массивами, а не копируются для каждого экземпляра.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию