Могу ли я изменить ссылку на функцию класса в ActionScript-3? - PullRequest
1 голос
/ 10 февраля 2010

Хорошо, у меня есть такой класс:

public class Foo extends Sprite {
    public function Foo(x:Number, y:Number):void {
        this.x = x;
        this.y = y;
    }

    public function bar():void {
        trace("I'm a happy class.");
    }
}

И я хочу сделать что-то вроде этого:

var foo:Foo = new Foo();
foo.bar = function():void {
              trace("I'm a happier class.");
          }

Я получаю эту ошибку от компилятора: «Ошибка: незаконное присвоение функциональной панели». Как я могу изменить панель общедоступных функций на лету?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2010

Вы не можете сделать это в ActionScript. Хотя есть обходной путь, попробуйте что-то вроде этого:

public dynamic class Foo{
 public function Foo() {
  this.bar = function():void { trace("bar"); }
 }
}

var f:Foo = new Foo();
f.bar();
f.bar = function():void { trace("baz"); }
f.bar();

РЕДАКТИРОВАТЬ: ИЛИ ЭТО

public class Foo{
    public var bar:Function;

    public function Foo() {
     this.bar = function():void { trace("bar"); }
    }
}

var f:Foo = new Foo();
f.bar();
f.bar = function():void { trace("baz"); }
f.bar();

Гудлак!

1 голос
/ 10 февраля 2010

Я думаю, что класс должен быть объявлен как dynamic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...