Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как свойство класса в функции, использовать внутри метода-конструктора? (http://www.flasher.ru/forum/showthread.php?t=190197)

yasha005 21.12.2012 22:06

Как свойство класса в функции, использовать внутри метода-конструктора?
 
Код AS3:

package
{
 final public class ExampleClass
 {
  private var arrayComponent:Vector<String> = Vector<String>();
  private var count:uint
 
  public function ExampleClass(count:uint)
  {
    this.count = count;
    this.ExecuteLocalFunction = function(i:uint):Boolean
    {
      this.arrayComponent.push(Math.random())
      return false;
    }
  }
 
  private function set ExecuteLocalFunction(f:Function):void
  {
    var i:uint = this.count;
    while(--i>-1)
    {
      if(f(i)) break;
    }
  }
 
 
 }
}


Почему выдаёт ошибку, что свойство this.arrayComponent.push не существует? хотя на самом деле это свойство объявлено в классе.
Код:

TypeError: Error #1010: Термин не определен и не имеет свойств.

iNils 21.12.2012 22:25

Весь этот код - сплошная ошибка.

yasha005 21.12.2012 22:39

прошу прощения за своё ламерство

КорДум 21.12.2012 22:53

Что вы получить-то хотели в итоге?

iNils 21.12.2012 22:57

Цитата:

Сообщение от yasha005 (Сообщение 1111177)
прошу прощения за своё ламерство

Извиняться не надо. Я просто не понимаю, как вы ошибку эту получили. Это код вообще не должен компилироваться.

yasha005 21.12.2012 22:57

Цитата:

Сообщение от КорДум (Сообщение 1111181)
Что вы получить-то хотели в итоге?

в итоге мне надо неоднократно использовать метод ExecuteLocalFunction в классе ExampleClass, передавая ему в качестве параметра различные функции.

Другими словами: обработать различные функции одним методом

Добавлено через 2 минуты
Цитата:

Сообщение от iNils (Сообщение 1111182)
Извиняться не надо. Я просто не понимаю, как вы ошибку эту получили. Это код вообще не должен компилироваться.

Если внутри функции, которая передаётся в качестве параметра методу ExecuteLocalFunction, не использовать свойство this.arrayComponent, то всё хорошо компилируется без ошибок

КорДум 21.12.2012 23:14

Код AS3:

package {
 
        public class Executor {
                private var _componentList:Vector.<Number>;
                private var _count:uint;
 
                public function Executor(count:uint) {
                        _count = count;
                        _componentList = new <Number>[];
 
                        execute(foo);
                }
 
 
                private function execute(foo:Function):void {
                        for (var i:uint = 0; i < _count; i++) {
                                if (foo(i)) {
                                        break;
                                }
                        }
                }
 
 
                private function foo(number:Number):Boolean {
                        _componentList.push(number);
                        return false;
                }
        }
}

Ну вот так, что ли.

yasha005 21.12.2012 23:28

Цитата:

Сообщение от КорДум (Сообщение 1111190)
Код AS3:

package {
 
        public class Executor {
                private var _componentList:Vector.<Number>;
                private var _count:uint;
 
                public function Executor(count:uint) {
                        _count = count;
                        _componentList = new <Number>[];
 
                        execute(foo);
                }
 
 
                private function execute(foo:Function):void {
                        for (var i:uint = 0; i < _count; i++) {
                                if (foo(i)) {
                                        break;
                                }
                        }
                }
 
 
                private function foo(number:Number):Boolean {
                        _componentList.push(number);
                        return false;
                }
        }
}

Ну вот так, что ли.



Спасибо, мысль интересная, но тогда в этом случае ещё и придётся передавать в метод execute ещё и переменные (например в качестве объекта), объявленные внутри метода Executor.
p.s. меня это навеяло на мысль, что проще будет использовать шаблон проектирования Декоратор или Компановщик

КорДум 21.12.2012 23:30

Цитата:

но тогда в этом случае ещё и придётся передавать в метод execute ещё и переменные
Ничего не понял. Я всего лишь правильно и красиво переписал ваш код.

yasha005 21.12.2012 23:36

Цитата:

Сообщение от КорДум (Сообщение 1111195)
Ничего не понял. Я всего лишь правильно и красиво переписал ваш код.

Спасибо, ваш код мне помог направить ход моих мыслей по созданию моего приложения в нужное русло


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

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