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

Object 构造函数中声明的变量与类属性冲突,object,actionscript,orientation,scope,Object,Actionscript,Orientation,Scope,我正在通过扩展flash.display.SimpleButton在ActionScript中创建一个按钮 但是,当我在构造函数中声明某些变量时,按钮的行为并不像预期的那样,这些变量也恰好作为属性存在于SimpleButton类中。他们似乎有冲突 为什么会这样?难道不应该允许本地声明的变量与类似命名的类属性共存吗 下面的片段可能更好地说明了这个问题: public class MyButton extends SimpleButton{ public function MyButton

我正在通过扩展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):

谢谢


Aodh。

您不能重新声明已经存在的变量,无论是本地变量还是非本地变量。唯一可以执行类似操作的地方是方法参数,在这里可以使用与本地/类变量相同的参数名称

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

super(new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)));
或者在调用
super()后直接设置它们如下所示:

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

您不能重新声明已经存在的变量,无论是本地变量还是非本地变量。唯一可以执行类似操作的地方是方法参数,在这里可以使用与本地/类变量相同的参数名称

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

super(new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)));
或者在调用
super()后直接设置它们如下所示:

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

只是为了澄清,将变量重命名为例如up、down、hit等是有效的,但我很好奇为什么会发生这种情况?只是为了澄清,将变量重命名为例如up、down、hit等是有效的,但我很好奇为什么会发生这种情况?好的,我刚刚做了一个测试,在构造函数中重新声明了一个类变量,当我跟踪值时,我得到了预期的结果,即本地重新声明的变量对类声明的变量没有任何影响。我还对属性进行了测试,结果相同。您是否将它们放在
super()之后?我编写了一个快速测试用例,并在调用super之前和之后设置了变量。在这两种情况下,超级类和子类变量都不会相互干扰?我不确定我是否理解你的意思,但即使你设法让它工作,我强烈建议你不要让变量以相同的方式命名,而是在子类中做不同的事。只是澄清一下,变量是在构造函数中声明的,据我所知,我之所以提出这个问题,是因为它们的作用域应该局限于构造函数,而不是构造函数之外的任何东西?好的,我只是做了一个测试,在构造函数中重新声明了一个类变量,当我跟踪值时,我得到了预期的结果,即本地重新声明的变量对类声明的变量没有任何影响。我还对属性进行了测试,结果相同。您是否将它们放在
super()之后?我编写了一个快速测试用例,并在调用super之前和之后设置了变量。在这两种情况下,超级类和子类变量都不会相互干扰?我不确定我是否理解你的意思,但即使你设法让它工作,我强烈建议你不要让变量以相同的方式命名,而是在子类中做不同的事。只是澄清一下,变量是在构造函数中声明的,就我所知,我之所以发布这个问题,是因为它们的范围应该限制在构造器,而不是构造器之外的任何东西?