Алисхан Газаматов
Senior Frontend Dev · 04.04
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() и кастомные цепочки.
#фронтенд #прототипыеще контент автора
еще контент автора
Алисхан Газаматов
Senior Frontend Dev · 04.04
войдите, чтобы увидеть
и подписаться на интересных профи