2010-02-10 41 views
1

好吧,我有一个这样的类:我可以在ActionScript-3中更改类的函数引用吗?

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."); 
      } 

我得到来自编译器这个错误:“错误:非法分配功能栏“。我该如何更改公共功能栏?

+0

Tyler Egeto的回答很糟糕。但是现在,我如何使用分配给bar的函数访问Foo的私有成员? – Ricardo

+0

这现在看起来像一个奇怪的请求。你为什么需要这样做? – sberry

+0

我刚刚完成了。我可以在关闭中使用关键字“this”来访问Foo类的成员(只是公共成员)。回答你的问题sberry2A,我只是想改变Foo类的一个实例的默认行为。我不想改变所有更改Foo类定义的实例的行为。 – Ricardo

回答

6

你不能这样做,在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

我认为类需要被声明为dynamic

相关问题