B~Vladi,
Если будешь продолжать общение на форуме в таком ключе (не только в этой теме, а вообще), будет бан.
JSprog,
Эта функция связывает через пустой конструктор
конструкторы Child и Parent цепочкой прототипов:
function extend(Child, Parent) {
// Поскольку мы не можем просто указать Child.prototype = Parent.prototype
// ведь это просто передаст ссылку на родительский прототип,
// и редактирование Child.prototype приведет к изменениям и в Parent.prototype.
// Поэтому мы создадим пустой конструктор:
var F = function() { }
// Прототипом которого укажем Parent.prototype (наследуем свойства Parent):
F.prototype = Parent.prototype
// А для Child "отнаследуем" этот пустой конструктор (укажем прототипом объект этого конструктора),
// и теперь редактирование Child.prototype не затронет Parent.prototype:
Child.prototype = new F()
// Теперь мы связали Child и Parent, через "пустой" конструктор F,
// осталось только восстановить ссылку на конструктор для Child:
Child.prototype.constructor = Child
// А это просто сахар:
Child.superclass = Parent.prototype
}
Еще наверно нужно добавить, что эта функция связывает два конструктора таким образом, чтоб при объявлении прототипом Child объекта Parent, не приходилось вызывать его конструктор, т.е. в стандартном виде:
Child.prototype = new Parent();
Делает тоже самое, но заставляет исполниться конструктор Parent, что, в большинстве случаев, неудобно.
В этом коде мы заменяем Parent на пустой конструктор, который имеет такой же прототип, как и Parent, но при его вызове, не выполняет никакой инициализации.