如何使变量在AS3中像引用一样

时间:2011-08-22 09:33:06

标签: actionscript-3

  

可能重复:
  Can you have "ByRef" arguments in AS3 functions?

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
        }
    }
}

如果无法做到这一点,我想我只需要复制并粘贴代码几次。 :/

由于

3 个答案:

答案 0 :(得分:1)

不,原始类型只能按值传递。

答案 1 :(得分:1)

AS3中的原始类型实际上是通过引用传递的,但它们是不可变的,因此就像它们通过值传递一样。

  

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

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9c.html

因此您无法覆盖此行为。

答案 2 :(得分:1)

你可能会作弊。将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++;
    }
}