在构造函数中声明的变量与类属性冲突

时间:2011-05-23 12:27:11

标签: object actionscript orientation scope

我正在通过扩展flash.display.SimpleButton

在ActionScript中创建一个按钮

但是,当我在构造函数中声明某些变量时,按钮的行为并不像预期的那样,这些变量也恰好作为SimpleButton类中的属性存在。他们似乎有冲突..

这是为什么?是否应该允许本地声明的变量与具有相似名称的类属性共存?

下面的代码段可以更好地说明问题:

public class MyButton extends SimpleButton{

    public function MyButton(/*..*/){

        var upState:ButtonDisplayState = new ButtonDisplayState(/*..*/));
        var downState:ButtonDisplayState = new ButtonDisplayState(/*..*/);      
        var overState:ButtonDisplayState = new ButtonDisplayState(/*..*/);      
        var hitTestState:ButtonDisplayState = new ButtonDisplayState(/*..*/);       

        super(upState, overState, downState, hitTestState);

   }

}

API文档在这里(例如,查找upState):http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/SimpleButton.html#upState

谢谢,

奥德赫。

1 个答案:

答案 0 :(得分:1)

您无法重新声明已存在的变量,无论是否为本地变量。您可以执行此类操作的唯一位置是方法参数,您可以在其中使用与本地/类变量相同的参数名称。

为什么不直接将这些状态传递给构造函数,如:

super(new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)));

或者在调用super();之后直接设置它们:

upState = new ButtonDisplayState(/*..*/));
downState = new ButtonDisplayState(/*..*/);      
overState = new ButtonDisplayState(/*..*/);      
hitTestState = new ButtonDisplayState(/*..*/);