ActionScript 3构造函数范围问题

时间:2010-02-04 15:02:13

标签: 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.addElement(myLabel);
    } etc.

这个自定义组件做了我期望的事情;它看起来像带有text =“My label!”的标签控件。

问题:有没有办法在项目的其他地方引用myLabel标签控件(例如更改文本)?

目前,我可以进入内部标签控件的唯一方法是调用类似myGroup.getElementAt(0)的内容。

我意识到将标签变成类变量会更有意义 - 我只是想知道这段代码是如何工作的。

2 个答案:

答案 0 :(得分:2)

您可以让公共设置器更改文本标签:

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 function,所以它的范围仅适用于此function

答案 1 :(得分:0)

在ActionScript中,变量是命名句柄,您可以使用这些句柄来获取对象和数据。变量有一些叫做 scope 的东西,它指定句柄的哪些部分是有效的。

在函数内部创建变量时,其范围是该函数。也就是说,特定的命名句柄只能在该函数中使用。

在您的代码中,您创建一个名为myLabel的句柄,并在其中放置Label - 让我们称之为Label123。接下来,您将Label123放入MyGroup的元素列表中,这会为MyGroup提供一个附加到Label123的句柄。然后函数结束,名为myLabel的句柄不再可用。 Label123仍然存在,因为MyGroup有句柄。

如果您将myLabel创建为privateprotected类变量,则该句柄可以从MyGroup内的任何函数中使用。如果您将其创建为public类变量,则它可以在MyGroup内的任何位置使用,也可以在代码中具有MyGroup实例的任何位置使用。 (如果您将其创建为internal类变量,它将可用于包MyGroup内的任何位置。)