Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 28.02.2012, 22:20
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 1  
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
По умолчанию Что дает употребление this в не динамических классах?

Собственно, сабж. Никогда не пользовался в не динамических классах, но часто вижу употребление другими этого ключевого слова везде, где только можно. Это что-то дает? И, если дает, то что? А если не дает, зачем использовать? Спасибо.
UPD. Наверное это мега-нубский вопрос, но я в упор не понимаю, зачем использовать this. Объясните мне, люди!


Последний раз редактировалось gait; 28.02.2012 в 22:34.
Старый 28.02.2012, 23:11
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 2  
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от gait Посмотреть сообщение
Что дает употребление this в не динамических классах? ... Никогда не пользовался в не динамических классах ...
А что оно дает в динамических классах?
Являюсь сторонником this. Намного удобнее читать код (лично мне) - сразу определяешь где свойство/метод класса или суперкласса, а где локальная переменная.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 28.02.2012, 23:24
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 3  
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Загуглите, что такое this.
Из этого всё растёт.
Из других неочевидных - чтобы различать переменные класса и локальные.
Код AS3:
private var a:int;
function fun(a:int):void {//если вам лень придумывать уникальные имена или религия не позволяет, например
this.a = a;
}
Когда лепят всюду, это такая прямая замена m_ венгерской нотации, означает, что переменная - член класса.
PS: this хоть безопасен, а вот super лучше не писать, это какое-то легкое помешательство чисто местных флешеров.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 28.02.2012, 23:35
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 4  
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от -De- Посмотреть сообщение
PS: this хоть безопасен, а вот super лучше не писать, это какое-то легкое помешательство чисто местных флешеров.
Не являюсь сторонником super (хотя, иногда без него нельзя обойтись). Но все же. Разве super не увеличивает скорость компиляции? Даже если не увеличивает, то почему лучше не писать?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 29.02.2012, 04:01
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 5  
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Цитата:
Сообщение от -De- Посмотреть сообщение
Загуглите, что такое this.
Из этого всё растёт.
Я не гуглил, просто открыл справку, а там написано только это: "Ссылка на объект, содержащий метод. При выполнении сценария ключевое слово this ссылается на объект, содержащий сценарий. В теле метода ключевое слово this ссылается на экземпляр класса, который содержит вызываемый метод." И всё, больше никаких подробностей
Цитата:
Сообщение от -De- Посмотреть сообщение
Когда лепят всюду, это такая прямая замена m_ венгерской нотации, означает, что переменная - член класса.
А если я как раз эту венгерскую нотацию и использую, только в упрощенном варианте
Код AS3:
private var _myObj:Object;
, то какая еще может быть польза от применения this? (Вообще-то, даже странно. Довольно часто встречаю конструкции с венгерскими нотациями и с this, например this._myObj. Это вообще как понимать? Зачем так делать?)

Цитата:
Сообщение от wvxvw Посмотреть сообщение
Я пишу this всегда, тогда когда оно есть.
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Поэтому, я восновном пишу super, и редко this.
Всё-таки мне не очень ясно, когда вы пишете this

Цитата:
Сообщение от wvxvw Посмотреть сообщение
Еще такой момент. this это не ключевое слово, это переменная, просто компилятор сам заполняет значение этой переменной. Ключевое слово, это, например, for, var и т.д. - т.е. это не "идентификатор".
Я конечно в такие дебри не вдавался, и, может быть вы правы, но очень часто я встречал упоминание в адобовской доке, что это именно ключевое слово. Вот, например, страница 109 "Так как статические методы не связаны с отдельными экземплярами, в их теле нельзя использовать ключевые слова this и super.". "В примере проверяется также значение ключевого слова this. В данном случае this представляет глобальный объект." (стр 276). Или вот еще: "Учтите, что ключевое слово this относится к экземпляру ChildSprite с именем child. В этом состоит отличие от поведения в ActionScript 2.0. Если вы использовали компоненты в ActionScript 2.0, то могли запомнить, что когда метод класса передавался UIEventDispatcher.addEventListener(), область его действия была привязана к компоненту, который выполнял широковещательную рассылку события вместо класса, в
котором был определен метод прослушивателя. Иными словами, если вы пользовались этим методом в
ActionScript 2.0, ключевое слово this будет относиться к компоненту, осуществляющему широковещательную рассылку события, а не к экземпляру ChildSprite."

Но справедливости ради надо отметить, что this еще именуется в документации как ссылка (на той же 109 странице, например), поэтому, я не могу быть увереным в своём понимании.


Последний раз редактировалось gait; 29.02.2012 в 04:04.
Старый 29.02.2012, 04:33
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 6  
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Цитата:
Сообщение от gait Посмотреть сообщение
При выполнении сценария ключевое слово this ссылается на объект, содержащий сценарий. В теле метода ключевое слово this ссылается на экземпляр класса, который содержит вызываемый метод.
Ну да, кэп вот подсказывает, что когда нужен "объект, содержащий сценарий", "экземпляр класса, который содержит вызываемый метод", тогда и писать this. Ссылку там на себя передать кому. Без остального можно жить.
UPD: вроде так и не поняли, что же это такое. this - это экземпляр класса, в методе которого этот this написан. Статики живут глобально и отдельно от экземпляров класса (чтоб их вызывать не нужно создавать экземпляр класса, например), нет экземпляра - нет this. Переменные типа класса - все ссылки, потому this - это тоже ссылка (т.е. при присвоении а = б, если а и б - классы, то копирование класса б не происходит, а а и б ссылаются на один обьект и если менять а, то будет меняться и б).
Если что - поищите примеры использования %) И учите, блин, язык, а то чую написал китайскую грамоту =\
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 29.02.2012 в 04:43.
Старый 28.02.2012, 23:49
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 7  
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Пишу только то что нужно и когда нужно (this, super). Никакого дискомфорта от этого не испытываю.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 29.02.2012, 00:09
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Если в классе (или его наследниках), где везде писалось super.method() method всё-таки кто-то перегрузит, то придется от этого super избавляться.
super пишут либо если method уже перегружен и таки хочется вызвать метод базового класса - собсно для этого super сделан. Либо если класс криво написан и потому опасно этот method перегружать автор хочет сказать "не перегружайте method ни за что, не вашего ума дело".
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 29.02.2012, 00:43
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 9  
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Перегрузки в АС3 нет, поэтому логично предположить, что имеется в виду переопределение. -De-, можешь обьяснить, что это значит:
Цитата:
Сообщение от -De- Посмотреть сообщение
Либо если класс криво написан и потому опасно этот method перегружать автор хочет сказать "не перегружайте method ни за что, не вашего ума дело".
Почему опасно? Выходит, я не могу написать:
Код AS3:
public class SomeClass {
      public function func1():void {
            doSomeAnother();
            //здесь вызываю метод суперкласса:
            super.method();
            //что в строчке выше кривого, и почему это делать опасно?
            //и где намек на то, что я говорю: "не переопределяй method!!!"
      }
 
      override public function method():void {
            doSomething();
            super.method();
      }
}
Код AS3:
var a:SomeClass = new SomeClass();
//делаю что-то и вызываю метод суперкласса
a.func1();
//вызываю переопределенный метод
a.method();
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 29.02.2012 в 00:47.
Старый 29.02.2012, 00:31
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 10  
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
-De-, чего - то я немного не догнал, что ты подразумеваешь под
Цитата:
перегрузит
? или ты про переопределение?
__________________
местонахождение

Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 05:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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