JavaScript: Что такое prototype?

Если ты работаешь с JavaScript, ты точно сталкивался с этим понятием. Давай разберёмся, что такое prototype, где он используется и как работает под капотом.

1. У кого есть .prototype?

Свойство .prototype есть только у функций. Оно используется, когда функция выступает в роли конструктора:

function Person(name) { this.name = name; }

Person.prototype.sayHi = function () { console.log(Hi, I'm ${this.name}); };

const user = new Person('Alikhan');

user.sayHi(); // Hi, I'm Alikhan

Здесь user унаследовал метод sayHi через прототип Person.prototype.

2. А как же обычные объекты?

У обычных объектов нет свойства .prototype, но у них есть внутреннее свойство [[Prototype]] (доступное через proto или Object.getPrototypeOf()):

const obj = {};

console.log(obj.proto === Object.prototype); // true

3. Как создать объект без прототипа?

Иногда тебе нужно создать объект, который не наследует ничего, даже базовые методы (toString, hasOwnProperty и т.д.). Такое нужно, например, если ты делаешь чистую хэш-таблицу, где ключи — любые строки:

const cleanObject = Object.create(null);

cleanObject['proto'] = 'value'; // это просто ключ, не сломает объект

console.log(cleanObject.proto); // undefined

Зачем вообще всё это нужно? • Экономия памяти: методы хранятся в одном месте — в прототипе. • Наследование: можно расширять поведение без копирования кода. • Гибкость: можно переопределять, внедрять свои прототипы, использовать Object.create() и кастомные цепочки.

👉🏻 пост в телеграм

#фронтенд #прототипы
repost

19

input message

напишите коммент

еще контент автора

еще контент автора

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь