2010-02-10 40 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

相關問題