Prototype Inheritance Flashcards

(5 cards)

1
Q

Свойство __proto__, Object.create(null);

A
Ссылка \_\_proto\_\_ дает возможность искать методы и свойства от наследуемых объектов. Метод hasOwnProperty позволяет определить что метод или свойство принадлежит самому объекту. 
Создание пустого объекта без служебных методов var data = Object.create(null);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Свойство F.prototype

A

Мы можем задать прототип сразу для всех будущих объектов конструктору объекта через свойство prototype. Этот подход мультибраузерный в отличие от такого же присвоения __proto__ в конструкторе.

function Rabbit(name) {
  this.name = name;
}
Rabbit.prototype = animal;

Каждая функция содержит прототип, в котором записан конструктор этой функции (функция может быть конструктором объекта).
Конструктор может быть полезен для создания нового экземпляра объекта, если мы не знаем или не имеем доступа к конструктору.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Классы на прототипах

A

Для создания класса на прототипах мы должны создать конструктор, в котором мы задаем только свойства. Далее через F.prototype.method = function(){} добавляем нужные методы. Этот метод работает быстрее и экономнее по памяти. Недостатком служит невозможность использования приватных переменных, т.к. они не будут доступны в методах, их делают защищенными this._property

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Наследование классов на прототипах

A

Для доступа к “складу” методов родителя можно присвоить свойству прототипа object.prototype.__proto__ прототип родителя. Но для мультибраузерности лучше присвоить прототипу конструктора Object.create(Parent.prototype). Дальше реализовывать методы для наследника. И конструктор еще присвоить (т.к. он теряется при присвоении прототипа). Если нам нужны параметры в конструкторе, присутствующие в конструкторе родителя мы можем “заполнить” их через Parent.apply(this, arguments). Таким же образом через передачу контекста можно вызывать родительские методы в переопределении.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Примеси

A

Прототипное наследование возможно только от одного объекта, т.к. ссылка __proto__ одна. Но можно добавлять сколько угодно методов в прототип от других объектов. Например, через цикл for где перебираются ключи.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly