Apache flex ActionScript 3构造函数范围问题
出于好奇,我决定在Flex 4项目中尝试以下内容:Apache flex ActionScript 3构造函数范围问题,apache-flex,actionscript-3,constructor,Apache Flex,Actionscript 3,Constructor,出于好奇,我决定在Flex 4项目中尝试以下内容: public class MyGroup extends Group { public function MyGroup() { super(); var myLabel:Label = new Label(); myLabel.id = "myLabel"; myLabel.text = "My label!"; this.addEl
public class MyGroup extends Group
{
public function MyGroup()
{
super();
var myLabel:Label = new Label();
myLabel.id = "myLabel";
myLabel.text = "My label!";
this.addElement(myLabel);
} etc.
这个自定义组件实现了我所期望的功能;它看起来像一个带有text=“My label!”的标签控件
问题:是否有任何方法可以在项目的其他地方引用myLabel标签控件(例如更改文本)
目前,访问内部label控件的唯一方法是调用myGroup.getElementAt(0)之类的东西
我意识到将标签设为类变量更有意义——我只是想知道这段代码是如何工作的。您可以使用公共setter来更改文本标签:
public class MyGroup extends Group
{
private var _label:Label=new Label();
public function set label(value:String):void{
_label.text=value;
}
public function MyGroup()
{
super();
_label.id = "myLabel";
label = "My label!";
addElement(_label);
}
.....
}
var myGroup:MyGroup=..
myGroup.label="Hello";
在您的情况下,由于您在
函数
中声明了var
myLabel
,因此它的作用域仅适用于ActionScript中的函数
,变量是命名句柄,您可以使用它来获取对象和数据。变量有一个称为范围的变量,它指定句柄在代码的哪些部分是有效的
在函数中创建变量时,其作用域就是该函数。也就是说,特定的命名句柄只能在该函数中使用
在代码中,您创建了一个名为myLabel
的句柄,并在其中放置了一个标签
——我们称之为Label123
。接下来,您将Label123
放入MyGroup
的元素列表中,这将为MyGroup
提供一个附加到Label123
的句柄。然后函数结束,名为myLabel
的句柄不再可用Label123
仍然存在,因为MyGroup
有一个句柄
如果将myLabel
创建为private
或protected
类变量,则可以从MyGroup
中的任何函数使用该句柄。如果将其创建为public
类变量,则它将在MyGroup
中的任何位置可用,也可以在代码中有MyGroup
实例的任何位置使用。(如果将其创建为内部
类变量,它将在MyGroup
所在的包中的任何位置可用。)