2011-05-23 89 views
1

我创建ActionScript中的按钮冲突的延长flash.display.SimpleButton与类属性

按钮并不像预期的那样,但是,当我宣布在构造函数中某些变量,也恰好存在于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文档是在这里(寻找北部为例):http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/SimpleButton.html#upState

感谢,

奥德赫。

+0

只是为了澄清,重命名变量例如上下,击中等作品,但我很好奇为什么发生这种情况? – Aodh 2011-05-23 12:32:06

回答

1

您不能重新声明已存在的变量,本地或不是。你可以做这样的事情的唯一方法是方法参数,你可以在这里有与本地/类变量相同的参数名称。

你为什么不只是这些国家传递给构造函数直接,如:

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

或可替代只是将它们直接调用​​这样后:

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

好吧我只是做了一个测试,我在构造函数中重新声明了一个类变量,并且当我追踪该值时,我得到了预期的结果,即本地重新声明的变量对类声明变量没有任何影响。我也做了一个相同结果的属性测试。 – Aodh 2011-05-23 13:09:27

+0

你把它们放在* super();后面吗? – dain 2011-05-23 13:23:11

+0

我写了一个快速测试用例,并在调用super之前和之后都设置了变量。在这两种情况下,超级变量和子类变量都不会相互干扰? – Aodh 2011-05-23 14:11:12