在Actionscript 3中传入变量ByRef

时间:2009-08-26 15:24:33

标签: flex actionscript-3 adobe byref

是否可以在ActionScript 3中将参数传递给方法ByRef(或out out)?

我的类顶部有一些全局范围的变量,如果它是== null,我的方法将填充该变量。

我正在传递需要填充的变量,但到目前为止,我的努力已返回一个本地填充的变量,使其全局范围版本仍然为null。

传递给我的方法的变量各不相同,所以我不能在我的方法中硬编码并只是设置它。

4 个答案:

答案 0 :(得分:4)

ActionScript 3默认情况下通过引用传递params,如Java - 原始类型除外。但是你想要它做的不是通过引用传递。传入的参数是对象的引用(在它不是基本类型的情况下),你可以在函数内部修改它。

但是,回答你的问题。这是一个解决方案:

function populateIfNull(variableName, value){
    this[variableName] = this[variableName] || value
}

您可以使用:

populateIfNull('name', 'Bob')
populateIfNull('age', 20)

答案 1 :(得分:1)

AS3没有通过引用传递(在这方面类似于Java,因为它按值传递引用)。

如果通过将对象包装在另一个对象中来控制客户端代码,则可以模拟类似的东西:

var myObj = null;
myFun({ a: myObj });
function (param) {
  if (param.a == null) {
    param.a = "Hello";
  }
}

答案 2 :(得分:1)

使用对象。

例如:

var myObj : Object = new Object();
var myArr : Array;

myObj.arr = myArr;

function populateViaRef(obj : Object) : void {
    obj.arr = new Array();

  for(var i : Number = 0; i < 10; i++)
     obj.arr[i] = i;

}

populateViaRef(myObj);

for(var i : Number = 0; i < 10; i++)
    trace(myObj.arr[i]);

答案 3 :(得分:1)

在ActionScript 3.0中,所有参数都通过引用传递,因为所有值都存储为对象。但是,属于原始数据类型的对象(包括Boolean,Number,int,uint和String)具有特殊的运算符,使它们的行为就像它们按值传递一样。 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

在Java中,参数按值传递。 http://javadude.com/articles/passbyvalue.htm