Actionscript 3 «этот» вопрос - PullRequest
       19

Actionscript 3 «этот» вопрос

0 голосов
/ 26 февраля 2011

Я знаю, что при написании ActionScript 3 кода (http://www.daveoncode.com/2009/01/07/we-should-always-use-actionscripts-this-keyword/).

) очень часто можно использовать this как можно больше.

Но что делать, если вы пишете анонимные функции, которые не имеют this соответствия.

x.addEventListener(Event.WHATEVER, function(event:*) {
    // When this callback fires, there is a fail:
    // because there is no 'this' at this point.

    // INVALID!
    this.someAction();
});

Я видел несколько рекомендаций по написанию чего-то вроде:

var self = this;

и затем использование self в коде ваших анонимных функций, но это кажется странным.

Что вы думаете по этому вопросу (например, есть ли у вас что-то об этом в вашем стандарте кодирования) ?

Ответы [ 5 ]

1 голос
/ 28 февраля 2011

Есть ли у вас особая причина для использования анонимных функций над именованными функциями? Цитировать Гранта Скиннера:

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

Вот интересное обсуждение функций и возможностей из блога Майка Чемберса:

http://www.mikechambers.com/blog/2008/10/08/function-closures-and-this-in-actionscript-3/

Если вы прокрутите вниз внизу комментариев, вы сможете найти ответ Гранта.

1 голос
/ 26 февраля 2011

Поскольку вы используете анонимную функцию, этого по сути не существует.

Определяя self, вы определяете локальную переменную области действия, которую затем можно вызывать по ссылке ... лично,Мне не нравится практика.

0 голосов
/ 26 февраля 2011

Вы можете использовать методы, чтобы «this» было зафиксировано для экземпляра, или прекратить использовать «this», чтобы Flash Player выполнял поиск в цепочке областей действия.Я предпочитаю, чтобы Flash Player осуществлял поиск в цепочке областей действия, потому что я думаю, что код с «this» везде труден для чтения.

0 голосов
/ 26 февраля 2011

У нас похожий подход (так что это не столько ответ, сколько подтверждение вашего подхода):

public class myClass extends EventDispatcher{

   public function foo() : void {
      var thisObject : myClass = this;
      this.addEventListener(EVENT, function(event : Event) : void {
         thisObject.foo_internal();
      }, false, 0, true);
   }

   protected function foo_interal() : void {

   }

}

Конечно, пурист может сказать, что вы не должны добавлятьслушатели таким образом, что мешает вам удалить их!Тем не менее, мы используем это соглашение в других местах, где мы используем внутренние функции вне контекста слушателя.

0 голосов
/ 26 февраля 2011

Отредактировано: Ах, мой плохой, я неправильно понял.Обычно я не ссылаюсь на this, если только это не отдельное действие и т. Д. Использование self или чего-то подобного дает другим методам доступ к нему.Я лично подхожу к разработке из этого стандарта, для удаления слушателей и т. Д.

Надеюсь, это немного поможет.

...