Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 66 из 114 · 9 мин
Цепочка прототипов, Object.create, Object.getPrototypeOf, Object.setPrototypeOf и isPrototypeOf.
Создаю пустой массив, а у него уже есть map, push… Откуда?
Из прототипа. Если свойства нет у объекта, я ищу его у прототипа, потом у прототипа прототипа — по цепочке.
Object.prototype → null. Классы — удобная запись этого механизма.const arr = [];
console.log(Object.getPrototypeOf(arr) === Array.prototype);
console.log(Object.getPrototypeOf(Array.prototype) === Object.prototype);Object.create()Object.create(proto) — новый объект, прототипом которого будет proto. Object.create(null) — объект совсем без прототипа.const item = { describe() { return `${this.name}, ${this.ml} мл`; } };
const pen = Object.create(item);
pen.name = "Блокнот";
pen.ml = 350;
console.log(pen.describe());Object.getPrototypeOf()class Order {}
console.log(Object.getPrototypeOf(new Order()) === Order.prototype);Object.setPrototypeOf()const hot = { temp() { return "горячий"; } };
const tech = {};
Object.setPrototypeOf(tech, hot);
console.log(tech.temp());isPrototypeOf()proto.isPrototypeOf(obj) — true, если proto встречается в цепочке прототипов obj.instanceof.console.log(Array.prototype.isPrototypeOf([]), Object.prototype.isPrototypeOf([]));Метод, которого нет у объекта, ищется в прототипе. Так все массивы делят одни и те же методы.
Создай объект item с методом label() (возвращает ` ${this.name} — ${this.price} ₽ ) и объект pen через Object.create(item) с name: "Блокнот" и price: 220`.
Выберите один ответ.
Чем заканчивается цепочка прототипов обычного объекта?
Выберите один ответ.
Чем особенен Object.create(null)?
Проверяем состояние обучения…