Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript Классическое наследование (https://javascript.ru/forum/misc/4652-javascript-klassicheskoe-nasledovanie.html)

Kolyaj 11.08.2009 14:27

Классическое наследование в JavaScript невозможно, а эмуляция его вредна.

Цитата:

Сообщение от zzz
И всё таки мне интересно как работает этот код моно коменты к нему?

А что непонятно-то?

zzz 11.08.2009 14:29

Непонятно как код вообще работает. Если вам понятно то раскажите пожалуйста

Kolyaj 11.08.2009 14:36

Мне непонятно, что вам непонятно, и, соответственно, непонятно, что рассказывать. Если вам непонятно все, то и спрашивайте это все по пунктам.

Riim 11.08.2009 15:00

Необычность в следующем:
У всех классов, что от кого-то наследуют, создается метод uber, который запомнил замыканием ссылку на родителя и его экземпляр. При вызове он получает имя, по которому ищет в запомненном экземпляре нужный метод и вызывает его, передавая все параметры кроме имени.
Нужно это на тот случай если и родительский и дочерний класс будут содержать метод с одинаковым именем, т. е. метод дочернего класса экранирует одноименный метод в родительском классе, а значит вызвать экранированный метод из родителя через this.method() не получится и тут как раз пригодится uber.

В остальном стандартная, криворукая(нынче) реализация наследования, что применялась еще в 90-х. Ее минусы неплохо расписаны в статье, ссылка на которую ниже.


Цитата:

Сообщение от Kolyaj
Цитата:

Сообщение от Riim
сразу пришел в ужас от: var proto = this.parent = new parent();
Либо это что-то очень гениальное, либо книгу пора выкидывать.

А что тут не так?

При наследовании вызывается конструктор родителя. Такого не должно происходить, по крайней мере ни в одном другом языке я такого наследования не видел. Что такое хорошо и что такое плохо, внятно объясняется в этой статье: Решение проблемы холостого вызова функции-конструктора надкласса

zzz, это четвертая часть, точно не помню, но вроде в первых трех есть про call и apply

upd: книгу лучше сжечь.

zzz 11.08.2009 15:06

Цитата:

Сообщение от Kolyaj (Сообщение 26526)
Мне непонятно, что вам непонятно, и, соответственно, непонятно, что рассказывать. Если вам непонятно все, то и спрашивайте это все по пунктам.

Непонятно какой кусок кода что делает. Вот я и прошу поставить комменты.

Kolyaj 11.08.2009 15:09

Цитата:

Сообщение от Riim
При наследовании вызывается конструктор родителя.

А, ну это да.

Kolyaj 11.08.2009 15:10

zzz,
если вам лень задать конкретные вопросы, всем остальным тем более лень комментировать код.

zzz 11.08.2009 15:12

Что значит конкретные вопросы мне что перепесать каждуб строку кода или каждое слова кода и везде поставить вопрос А что это делает??? Повторяю я понимаю что этот код должен сделать но я не понимаю как он это делает.

Riim 11.08.2009 15:13

Цитата:

Сообщение от zzz
я понимаю что этот код должен сделать но я не понимаю как он это делает.

zzz, ты же сам написал, что знаешь основы.

zzz 11.08.2009 15:16

Уффф... как же обьяснить я понимаю все эти операторты, функции, обьекты но я не понимаю как всё это вместе выдаёт такой результат. Это всё равно что знать цифры и буквы но не понимаать как решается ленейное уровнение


Часовой пояс GMT +3, время: 23:37.