Prototype Inheritance Flashcards
(5 cards)
Свойство __proto__, Object.create(null);
Ссылка \_\_proto\_\_ дает возможность искать методы и свойства от наследуемых объектов. Метод hasOwnProperty позволяет определить что метод или свойство принадлежит самому объекту. Создание пустого объекта без служебных методов var data = Object.create(null);
Свойство F.prototype
Мы можем задать прототип сразу для всех будущих объектов конструктору объекта через свойство prototype. Этот подход мультибраузерный в отличие от такого же присвоения __proto__ в конструкторе.
function Rabbit(name) { this.name = name; } Rabbit.prototype = animal;
Каждая функция содержит прототип, в котором записан конструктор этой функции (функция может быть конструктором объекта).
Конструктор может быть полезен для создания нового экземпляра объекта, если мы не знаем или не имеем доступа к конструктору.
Классы на прототипах
Для создания класса на прототипах мы должны создать конструктор, в котором мы задаем только свойства. Далее через F.prototype.method = function(){} добавляем нужные методы. Этот метод работает быстрее и экономнее по памяти. Недостатком служит невозможность использования приватных переменных, т.к. они не будут доступны в методах, их делают защищенными this._property
Наследование классов на прототипах
Для доступа к “складу” методов родителя можно присвоить свойству прототипа object.prototype.__proto__ прототип родителя. Но для мультибраузерности лучше присвоить прототипу конструктора Object.create(Parent.prototype). Дальше реализовывать методы для наследника. И конструктор еще присвоить (т.к. он теряется при присвоении прототипа). Если нам нужны параметры в конструкторе, присутствующие в конструкторе родителя мы можем “заполнить” их через Parent.apply(this, arguments). Таким же образом через передачу контекста можно вызывать родительские методы в переопределении.
Примеси
Прототипное наследование возможно только от одного объекта, т.к. ссылка __proto__ одна. Но можно добавлять сколько угодно методов в прототип от других объектов. Например, через цикл for где перебираются ключи.