Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Ищу учителя!!! (https://javascript.ru/forum/offtopic/4816-ishhu-uchitelya.html)

Андрей Параничев 28.08.2009 18:03

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, но при его вызове, не выполняет никакой инициализации.

Dmitry A. Soshnikov 28.08.2009 18:15

Цитата:

Сообщение от JSprog
function extend(Child, Parent) { //Создание нового объекта типа функция

Ок, тут понятно.

Цитата:

Сообщение от JSprog
var F = function() { } //Создание нового пустого объекта типа функция

Хорошо, тоже понял. Только, наверное, просто - создание анонимной функции, которая сохраняется в переменную F, да?

Цитата:

Сообщение от JSprog
F.prototype = Parent.prototype //Добавление всех свойств аргумента функции extend parent пустому объекту типа функции

Ничё не понял. Наверное, утановка F.prototype на тот же объект, что и Parent.prototype. А что за .prototype у объектов-функций?

Цитата:

Сообщение от JSprog
Child.prototype = new F() //Добавление всех свойств F (а значит и всех свойств аргумента функции extend parent аргументу той же функции child)

Тоже сложно. Я вижу, что Child.prototype устанавливается в новый объект, порождённый конструктором F (поправь, если не правильно). А зачем это делается?

Цитата:

Сообщение от JSprog
Child.prototype.constructor = Child //поправление свойства constructor чтобы оно сново указывало на child

Ага, тут всё ясно. Только не ясно, зачем этот трюк? И почему "снова"? Оно где-то было "сброшено" или выставлено в другое значение?

Цитата:

Сообщение от JSprog
Child.superclass = Parent.prototype //для удобства создание прямой ссылки на родительский класс особенно удобно при вызове конструктора родителя и если его свойство было перекрыто

Тут тоже понятно.

Два пункта не понял. Может, B~Vladi поможет?

update: у меня реально что-то с письмами сёдня - плохо ходят. Ответ Андрей Параничева так и не пришёл, я его снова не видел, когда писал.

JSprog 28.08.2009 18:28

Цитата:

Сообщение от Dmitry A. Soshnikov
Наверное, утановка F.prototype на тот же объект, что и Parent.prototype.

Ну да:)
Цитата:

Сообщение от Dmitry A. Soshnikov
А зачем это делается?

Потому что F имеет все свойства Parent
Цитата:

Сообщение от Dmitry A. Soshnikov
Оно где-то было "сброшено" или выставлено в другое значение?

Вот тут
Цитата:

Сообщение от Dmitry A. Soshnikov
Child.prototype = new F()

Цитата:

Сообщение от Dmitry A. Soshnikov
Только не ясно, зачем этот трюк?

Чтобы экземпляры обекта содержали правильные свосва constructor

alexKniaz 28.08.2009 18:58

КУРСАНТ - Классная Универсальная Рабочая Сила Абсолютно Не желающая Трудиться

alexKniaz 28.08.2009 19:02

Нашёл вчера эту фразу в нете....

Ozerich 28.08.2009 19:40

Цитата:

Сообщение от JSprog (Сообщение 28713)
Админы удалите 4 последних поста включая этот

Я думаю,админы и без тебя разберутся удалять или нет:)
А тебе советую меньше флудить.Половина,а то и больше,твоих сообщений на этом форуме не имеют смысла,т.е флуд.

А по теме:
Не надо никаких "учителей".Счас ведь не 80-90гг,когда литературу было практически невозможно достать.Сам недавно начал изучать Js и скажу тебе что на этом сайте очень много полезных статей.Читай их попорядку.Примеры пробуй сам писать.Прочитал,написал. Потом изменил код,посмотрел что да как.Что не понятно спрашивай на форуме,излагая вопрос коротко и понятно и без наездов,типа ты тупой а я умный.
Удачи :victory:

JSprog 28.08.2009 19:50

Я с этого сайта все статьи прочитал :)

tenshi 28.08.2009 19:54

не все, некоторые я успел удалить :-P

JSprog 28.08.2009 19:57

А что тя так минусанули?
Влад Влад вот мы все соберёмся и как минусанём тебя

Ozerich 28.08.2009 19:57

Цитата:

Сообщение от JSprog (Сообщение 28716)
Я с этого сайта все статьи прочитал :)

Если бы ты не тока прочитал но еще и разобрал каждую статью,повторил то что там написано и сделал похожее что то,то ты бы точно не просил "учителя", а сам бы им мог становиться:)


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