ОБЪЕКТЫ JS

все объекты в JavaScript содержат внутреннюю ссылку на объект, известный как прототип.

Любые свойства прототипа становятся свойствами другого объекта, для которого он является прототипом.

оператор new создает пустой объект и затем вызывает функциюконструктор.

После создания пустого объекта оператор new устанавливает в этом объекте ссылку на прототип. Прототипом объекта является значение свойства prototype функцииконструктора. Все функции имеют свойство prototype, которое инициализируется в момент определения функции. Начальным значением этого свойства является объект с единственным свойством. Это свойство называется constructor и значением его является ссылка на саму функцию конструктор, с которой этот прототип ассоциируется.Любые свойства, добавленные к прототипу, автоматически становятся свойствами объектов, инициализируемых конструктором.

// Функция-конструктор инициализирует те свойства, которые могут

// иметь уникальные значения для каждого отдельного экземпляра.
function Rectangle(w, h) {
this.width = w;
this.height = h;
}
// Прототип объекта содержит методы и другие свойства, которые должны
// совместно использоваться всеми экземплярами этого класса.
Rectangle.prototype.area = function() { return this.width * this.height; }

Объект-прототип связан с конструктором, и каждый объект, инициализируемый конст
руктором, наследует тот набор свойств, который имеется в прототипе. Это значит,
что объектпрототип – идеальное место для методов и других свойствконстант.

Обратите внимание, что наследование осуществляется автоматически как часть
процесса поиска значения свойства. Свойства не копируются из объектапрото
типа в новый объект; они просто присутствуют, как если бы были свойствами
этих объектов. Это имеет два важных следствия. Вопервых, использование объ
ектовпрототипов может в значительной степени уменьшить объем памяти, тре
буемый для каждого объекта, т. к. объекты могут наследовать многие из своих
свойств. Вовторых, объект наследует свойства, даже если они были добавлены
в прототип после создания объекта. Это означает наличие возможности добав
лять новые методы к существующим классам (хотя это не совсем правильно).