AS3:无法将变量传递给子函数

时间:2013-01-04 19:25:20

标签: function variables actionscript constructor parent

我最近更改了显示对象的构造函数,以验证它们是否在舞台上。但是,这完全打破了我将值传递给子函数的能力。例如(为清晰起见,删除了大量代码):

父:

public var var1:uint;
public var var2:uint;
public var childFunction:ChildFunction;

public function createChild():void
{
    childFunction = new ChildFunction( var1, var2 );
    addChild( childFunction );
}

子:

public var varA:uint;
public var varB:uint;

public function ChildFunction( varA:uint, varB:uint )
{
    trace( varA, varB );

    if ( stage )
    {
        onAddtoStage();
    }
    else
    {
        addEventListener( Event.ADDED_TO_STAGE, onAddtoStage );
    }
}

public function onAddtoStage( e:Event = null ):void
{
    trace( varA, varB );
}

在这个例子中,我会在第一个跟踪中得到var1var2的正确值,但在第二个跟踪中得到0和0。重复测试表明,在离开构造函数之后,只要构造函数被保留,varA和varB的值就会被完全忘记,即使它们被声明为公共变量。

我承认我对动作脚本有很多不了解,但这让我摸不着头脑。任何帮助深表感谢。我知道我可以只看孩子父母的变量,但这不适用于我需要的东西;我需要将值下移并存储它们。

1 个答案:

答案 0 :(得分:1)

这是范围问题。

当您trace( varA, varB ); ChildFunction时,它正在使用作为参数传入的varAvarB

当您trace( varA, varB ); onAddToStage时,它使用的public var varA:uint;public var varB:uint;从未更改过,因此应该默认为0。

我假设您打算在其构造函数中设置ChildFunction的公共数据:

public function ChildFunction( varA:uint, varB:uint )
{
    trace( varA, varB );
    this.varA = varA;
    this.varB = varB;

    if ( stage )
    {
        ...