“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
}
}
}
我是否坚持在函数之外声明变量?
不,多维数组不能满足我的需要。虽然看起来它会解决所提供的代码片段中的所有内容吗?
我的意图是通过要使用的类传递数组并更改我使用的数组。如果我使用多维数组,由于会发生复制,效率会很低。
答案 0 :(得分:2)
要this[]
访问属性,这些属性必须属于this
。在您的示例中,属性属于定义它们的函数,并且在该范围之外是不可访问的。
首先;是的,为了使您的代码工作,您当然需要在类级别范围内定义属性。
但更重要的是,我会仔细研究你要做的事情并确定它是否是一个好方法 - 我的赌注是它不是。您似乎可能想要考虑一个处理您要存储的所有数据的隔离类。
答案 1 :(得分:2)
您的错误是因为您误操作了变量 “this”关键字表示您尝试在类的特定实例上定位变量 您已将变量局部地限定在函数中 您需要将它们移动到类声明区域以使“this”起作用。
package
{
public class main extends MovieClip
{
public var array1:Array = [1,2];
public var array2:Array = [3,4];
public function main():void
{
trace(this["array"+1][1]); //returns reference error 1069
}
}
}
// now if you meant to scope them locally to the function then you can not use "this"
// you have to assign them to an object or an array
package
{
public class main extends MovieClip
{
public function main():void
{
var obj:Object = {}
obj['array1'] = new Array( [1,2] )
obj['array2'] = new Array( [3,4] )
trace(obj["array"+1][1]);
}
}
}
这是未经测试的代码,但它应该让您走上正确的轨道。
答案 2 :(得分:0)
根据您要完全实现的目标,您还可以考虑将数组作为参数传递给函数,例如:
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 currentArray:Array
设置为您想要的任何数组,并根据需要引用它(如果适用)。
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);
}
}
}