Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Использование super (http://www.flasher.ru/forum/showthread.php?t=137068)

Psycho Tiger 03.03.2010 23:52

Использование super
 
С точки зрение тру-флешеризма нужно писать
Код AS3:

super.superClassMethod()

верно?
Интересует 2 вещи:
1) А если у меня цепочка:
Class1 extends Class2 extends Class3
чтобы в Class1 вызвать методы Class3 по логике super`а нужно писать super.super.method3(), только вот так нельзя - ругается. Тогда пишем как - super.method3() или даже просто method3()?

2) Ситуация:
Код AS3:

if (autoConnect) addEventListener(UserToUser.READY_EVENT, onModuleReady);
super(param, autoConnect);

Класс наследуется от класса, который наследуется от EventDispatcher`а. Правильней нужно поставить super.addEventListener, однако нельзя вызвать после использования super ещё и конструктор суперкласса - что делать?

etc 04.03.2010 00:03

1) Вызываем method3 класса Class2, который в свою очередь вызывает method3 у Class3. Всё через super.
2) Если оно асинхронное, то нафига что-то втыкать до вызова супер-конструктора?

wvxvw 04.03.2010 00:14

Вообще, в конструкторе лучше либо ничего не писать, либо самый минимум. Конструктор - это самая медленная функция в классе изза того, что каждый раз она по-новому прочитывается (остальные функции раз скомпилировали JIT'oм и используем готовые). Да и ограничения на порядок вызова тоже не самое лучшее - вобщем, если в конструкторе нужна какая-то логика, легче ее всю завернуть в отдельную функцию и вызвать из конструктора чем потом сталкиваться с подобного рода проблемами.

Psycho Tiger 04.03.2010 00:40

Цитата:

1) Вызываем method3 класса Class2, который в свою очередь вызывает method3 у Class3. Всё через super.
Звучит как будто надо оверрайдить в Class2 методы его суперкласса.
Я так понимаю что просто если метод в этом классе, то this.thisClassMethod(), а если в суперклассе или "выше" - то super.mySuperClassMethod()?
Уже кстати понимаю сторонников писать this везде, где нужно)
Кстати, про this - я пишу this.myMethod() или this.myPole - если это члены класса, а если это локальные переменные в методе писать this не нужно, верно?

Цитата:

2) Если оно асинхронное, то нафига что-то втыкать до вызова супер-конструктора?
В целом верно, просто когда увидел этот кусок задумался - а что если событие UserToUser.READY_EVENT может диспатчится в конструкторе? Конечно, если делать как скзаал wvxvw проблемы нет - но уже интересно просто с точки зрения правильности - без super ведь работает.

udaaff 04.03.2010 02:39

super в методах нужно писать там где необходимо, имхо. Так же как и this. В конструкторе всегда.
Цитата:

а если это локальные переменные в методе писать this не нужно, верно?
Проще попробовать, чем спросить :) Естественно не нужно.
Цитата:

Уже кстати понимаю сторонников писать this везде, где нужно)
Везде, где нужно, или везде где только можно? :)
Никогда не понимал сторонников загромождения своего кода различными ненужностями, которые якобы улучшают читаемость и понятность.

etc 04.03.2010 08:25

Цитата:

Сообщение от Psycho Tiger (Сообщение 890739)
если это локальные переменные в методе писать this не нужно, верно?

А что, получилось написать this? :)

Цитата:

Сообщение от Psycho Tiger (Сообщение 890739)
В целом верно, просто когда увидел этот кусок задумался - а что если событие UserToUser.READY_EVENT может диспатчится в конструкторе? Конечно, если делать как скзаал wvxvw проблемы нет - но уже интересно просто с точки зрения правильности - без super ведь работает.

И кому оно отправляется в конструкторе, мм?

Psycho Tiger 04.03.2010 09:49

Цитата:

Везде, где нужно, или везде где только можно?
Никогда не понимал сторонников загромождения своего кода различными ненужностями, которые якобы улучшают читаемость и понятность.
Везде, где нужно) Раньше переменную myVar обзывал по 3 раза - myVar, myVariable, variable (к примеру) - разные переменные для суперкласса, поля этого класса и локального класса. Сейчас часто такие пересечения и везде указываю область видимости - кайф )
Цитата:

Никогда не понимал сторонников загромождения своего кода различными ненужностями, которые якобы улучшают читаемость и понятность.
Насчёт this везде ещё соглашусь, однако с точки зрения ООП super всё таки при вызове методов суперкласса писать нужно. Байткод разный получается, так что... лучше переучиваться :)
Цитата:

А что, получилось написать this?
Цитата:

Проще попробовать, чем спросить Естественно не нужно.
Да, не пробовал, каюсь) Я пока ещё this не пишу везде и вся, наверное, если бы начал - вопроса бы не было) спасибо

Цитата:

И кому оно отправляется в конструкторе, мм?
Хах, верно) Хотя, можно же отправлять его чтобы как раз потомки подловили - но пахнет маразмом уже - проще метод пустой объявить и его оверрайдить.
Просто забавно, что код "идеологически" неверный работает, а идилогически верный - нет :(

Дак что с методами суперкласса суперкласса? Просто super.myMethod() ?

etc 04.03.2010 09:55

Цитата:

Сообщение от Psycho Tiger (Сообщение 890812)
Просто super.myMethod() ?

Ну само собой.

Psycho Tiger 06.04.2010 12:07

Кстати, в коде далеко не глупых ребят всё чаще встречаю
Код AS3:

this.addEventListener(...);

без override`а addEventListener`а.
Сам я с некоторых пор этой темы пишу
Код AS3:

super.addEventListener

Да и вообще, любое свойство и метод определенный в базовом классе пишу через super.
Как правильно?

Ещё заметил, что mxmlc не хочет компилировать конструкцию
Код AS3:

super.x+=10;

Однако,
Код AS3:

x+=10;

компилируется. У меня бета, из за этого или есть какая-то фишка?

Котяра 06.04.2010 12:43

super для методов а не свойств.


Часовой пояс GMT +4, время: 14:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.