Actionscript 3 actionscript 3.0错误1069“;这";在函数外找不到声明的变量

Actionscript 3 actionscript 3.0错误1069“;这";在函数外找不到声明的变量,actionscript-3,Actionscript 3,“This”无法找到适当的变量“array1”,尽管它已在函数中明确声明。但是,如果我在函数之外声明变量,它就会工作。如何使函数中的变量保持工作状态 package { public class main extends MovieClip { //If I declared the variables here it would work. public function main():void { var array1:Array = [1,2];

“This”无法找到适当的变量“array1”,尽管它已在函数中明确声明。但是,如果我在函数之外声明变量,它就会工作。如何使函数中的变量保持工作状态

package 
{

public class main extends MovieClip
{
//If I declared the variables here it would work.
    public function main():void
    {
        var array1:Array = [1,2];
        var array2:Array = [3,4];
        trace(this["array"+1][1]); //returns reference error 1069   
    }

}
}
我在函数外声明变量时是否遇到了麻烦

不,多维数组不能满足我的需要。虽然看起来它可以解决提供的代码片段中的所有问题,嗯


我的意图是将数组传递给要使用的类,并更改我使用的数组束。如果我使用多维数组,由于会发生大量复制,因此效率低下。

对于
此[]
要访问属性,这些属性必须属于
。在您的示例中,属性属于定义它们的函数,并且在该范围之外无法访问

因此,首先;是的,为了使代码正常工作,您当然需要在类级范围中定义属性


但更重要的是,我会仔细观察你正在尝试做的事情,并确定这是否是一个好方法——我打赌这不是。看起来你可能想考虑一个孤立的类来处理所有要存储的数据。

< > <代码> []]/> >访问属性,这些属性必须属于<代码> < <代码>。在您的示例中,属性属于定义它们的函数,并且在该范围之外无法访问

因此,首先;是的,为了使代码正常工作,您当然需要在类级范围中定义属性


但更重要的是,我会仔细观察你正在尝试做的事情,并确定这是否是一个好方法——我打赌这不是。看起来你可能想考虑一个孤立的类来处理你想存储的所有数据。

你的错误是因为你错误地限制了变量。 “this”关键字表示您正试图将变量定位在类的特定实例上。
您已将变量的作用域限定在函数的本地。
您需要将它们移动到类声明区域,以便“this”起作用


这是未经测试的代码,但它应该会让您走上正确的轨道。

您的错误是因为变量的作用域错误。
“this”关键字表示您正试图将变量定位在类的特定实例上。
您已将变量的作用域限定在函数的本地。
您需要将它们移动到类声明区域,以便“this”起作用


这是未经测试的代码,但它应该使您处于正确的轨道上。

取决于您正试图完成什么,您还可以考虑将数组作为参数传递给函数,例如:

function main():void
{
    var array1:Array = [1,2];
    var array2:Array = [3,4];
    doSomethingWithArray(array2);
}
main();

function doSomethingWithArray(arr:Array):void
{
    trace(arr[1]); //Traces the value of array2[1], which = 4
}

也考虑使用<代码> var当前数组:数组< /代码>,您可以根据需要设置任何数组,并根据需要引用它。

public class main extends MovieClip
{

    ...
    public var currentArray:Array;

    function main():void
    {
        var array1:Array = [1,2];
        currentArray = array1;
        doSomethingithCurrentArray();

        var array2:Array = [3,4];
        currentArray = array2;
        doSomethingithCurrentArray();

        currentArray = null;
    }

    public function doSomethingithCurrentArray():void {
       if(currentArray != null){
          trace(currentArray);
       }
    }

}

根据您试图完成的内容,您还可以考虑将数组作为参数传递给函数,例如:

function main():void
{
    var array1:Array = [1,2];
    var array2:Array = [3,4];
    doSomethingWithArray(array2);
}
main();

function doSomethingWithArray(arr:Array):void
{
    trace(arr[1]); //Traces the value of array2[1], which = 4
}

也考虑使用<代码> var当前数组:数组< /代码>,您可以根据需要设置任何数组,并根据需要引用它。

public class main extends MovieClip
{

    ...
    public var currentArray:Array;

    function main():void
    {
        var array1:Array = [1,2];
        currentArray = array1;
        doSomethingithCurrentArray();

        var array2:Array = [3,4];
        currentArray = array2;
        doSomethingithCurrentArray();

        currentArray = null;
    }

    public function doSomethingithCurrentArray():void {
       if(currentArray != null){
          trace(currentArray);
       }
    }

}

哦,是的,我已经有了一个类,它包含了我想要存储的所有数据,这是为了访问正确的数据并将其转发到正确的位置。哦,是的,我已经有了一个类,它包含了我想要存储的所有数据,这是为了访问正确的一个,并将其转发到正确的位置。我测试了对象的可能性,但它不起作用。没有任何东西告诉它这是一个数组,因此它会变得混乱。我不熟悉“object”选项,因此我将进一步研究。在AS3中,对象和数组之间几乎没有区别。您得到了什么错误?1180:调用可能未定义的方法数组。从行中:obj['array1']=new array([1,2])我测试了对象的可能性,但它不起作用。没有任何东西告诉它它是一个数组,所以它会混淆。我不熟悉“object”选项,因此我将进一步研究。在AS3中,对象和数组之间几乎没有区别。您得到了什么错误?1180:调用可能未定义的方法数组。从以下行开始:obj['array1']=新数组([1,2])