2009-08-26 76 views
1

是否可以在ActionScript 3中將參數傳遞給ByRef(或out等)方法?在Actionscript 3中傳入變量ByRef

我在我的類的頂部有一些全局範圍的變量,我的方法將填充該變量,如果它是== null。

我傳遞了需要填充的變量,但到目前爲止,我的努力已經返回了一個本地填充的變量,其全局範圍的版本仍然爲空。

傳遞給我的方法的變量各不相同,所以我不能在我的方法中對其進行硬編碼並簡單地設置它。

回答

4

的ActionScript 3遍參數,可以像Java - 除了原始類型。但是你想要做的是不通過引用。傳入的參數是對對象的引用(在不是基本類型的情況下),您可能在函數內修改該對象。

但是,要回答你的問題。這裏是一個解決方案:

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

,您可以使用這樣的:

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

AS3沒有引用傳遞(它在這方面類似於Java,因爲它通過值傳遞引用)。

類似的東西可以如果通過在另一個對象包裹對象控制客戶端代碼來模擬:通過參照由默認

var myObj = null; 
myFun({ a: myObj }); 
function (param) { 
    if (param.a == null) { 
    param.a = "Hello"; 
    } 
} 
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]); 
0

在ActionScript 3.0,所有參數都通過引用傳遞,因爲所有的值被存儲爲對象。但是,屬於基本數據類型(包括布爾值,數字,int,uint和String)的對象具有特殊的運算符,它們的行爲就像按值傳遞一樣。 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

在Java參數中按值傳遞。 http://javadude.com/articles/passbyvalue.htm

+0

舊的答案。但是錯誤的。值不作爲對象存儲並作爲引用傳遞。你可以構造一個'global.uint'對象,但它不會是'uint'原型。 – Hydro 2017-10-15 16:51:01

+0

一個對象是一個原始類型,但它存儲爲一個指針。 – Hydro 2017-10-15 16:54:49