Actionscript 3 如何使变量像AS3中的引用一样工作

Actionscript 3 如何使变量像AS3中的引用一样工作,actionscript-3,Actionscript 3,可能重复: AS3中的基元类型按值传递,而不是按引用传递。是否有方法重写该行为并通过引用传递某些变量?以下面的代码为例: for (var i=0; i<4; i++) { for (var j=0; j<4; j++) { if(i==0 && j==0){ switch(currentRotation){ case 0: var1 = j; //I want

可能重复:

AS3中的基元类型按值传递,而不是按引用传递。是否有方法重写该行为并通过引用传递某些变量?以下面的代码为例:

for (var i=0; i<4; i++) {
    for (var j=0; j<4; j++) {
        if(i==0 && j==0){
            switch(currentRotation){

            case 0:
                var1 = j; //I want var 1 to be a reference to j, not the value of j
                    break;

            }
        }
        if(someArray[var1][var2]){
            //stuff
        }
    }
}

for(var i=0;iNo,基元类型只能通过值传递。

AS3中的基元类型实际上是通过引用传递的,但它们是不可变的,所以它们的行为就像是通过值传递一样

对于对技术细节感兴趣的读者,ActionScript在内部将原始值存储为不可变对象。它们存储为不可变对象的事实意味着按引用传递实际上与按值传递相同。这减少了内存使用并提高了执行速度,因为引用通常是有意义的我比价值观本身小得多


因此,您将无法覆盖此行为。

您可能会有点作弊。将
j
包装到某个对象中:

var obj = {j: 0};
for (var i=0; i<4; i++) {
    while (obj.j < 4) {
        if(i==0 && obj.j==0){
            switch(currentRotation){

            case 0:
                //...
                    break;

            }
        }
        if(someArray[var1][var2]){
            //stuff
        }
        obj.j++;
    }
}
var obj={j:0};

因为(var i=0;iAhh!从未想过。谢谢!+1很好的解决方案,但是,好奇的是,“obj.j++”在哪里@阿斯曼,谢谢!我错过了它)