Необычность в следующем:
У всех классов, что от кого-то наследуют, создается метод uber, который запомнил замыканием ссылку на родителя и его экземпляр. При вызове он получает имя, по которому ищет в запомненном экземпляре нужный метод и вызывает его, передавая все параметры кроме имени.
Нужно это на тот случай если и родительский и дочерний класс будут содержать метод с одинаковым именем, т. е. метод дочернего класса экранирует одноименный метод в родительском классе, а значит вызвать экранированный метод из родителя через this.method() не получится и тут как раз пригодится uber.
В остальном стандартная, криворукая(нынче) реализация наследования, что применялась еще в 90-х. Ее минусы неплохо расписаны в статье, ссылка на которую ниже.
Сообщение от Kolyaj
|
Сообщение от Riim
|
сразу пришел в ужас от: var proto = this.parent = new parent();
Либо это что-то очень гениальное, либо книгу пора выкидывать.
|
А что тут не так?
|
При наследовании вызывается конструктор родителя. Такого не должно происходить, по крайней мере ни в одном другом языке я такого наследования не видел. Что такое хорошо и что такое плохо, внятно объясняется в этой статье:
Решение проблемы холостого вызова функции-конструктора надкласса
zzz, это четвертая часть, точно не помню, но вроде в первых трех есть про call и apply
upd: книгу лучше сжечь.