2012-11-02 51 views
0

問題很簡單: 我需要將實際變量傳遞給函數。將實際變量對象傳遞給函數

private var test:String = "KKK"; 
trace (" Before --->>> " + test); 
testFunction(test); 
trace (" Next --->>> " + test); 

private function testFunction(d:String):void{ 
    d = "MMM"; 
} 

結果:

Before --->>> KKK 
Next --->>> KKK 

結果是正確的,但,我想要的是,實際test變量發送到我的功能和更改。所以我想要有這樣的輸出:

Before --->>> KKK 
Next --->>> MMM 

任何解決方案?

謝謝您的回答,但如果我有這樣的代碼,我需要實際的變量傳遞給我的功能:

if (lastPos == -1){// if this is first item 
    flagLEFT = "mid"; 
    tempImageLEFT = new Bitmap(Bitmap(dataBANK[0]["lineimage" + 10]).bitmapData); 
}else if (nextPos == -1){// if this is the last position 
    flagRIGHT = "mid"; 
    tempImageRGHT = new Bitmap(Bitmap(dataBANK[0]["lineimage" + 13]).bitmapData); 
} 

正如你看到的,變化是flagLEFTtempImageRGHT。此外,我對數字(10和13)進行了更改,可以以正常方式進行處理。我需要這樣的:

private function itemFirstLast(flag:String, bmp:Bitmap, pos:int):void{ 
    flag = "mid"; 
    bmp = new Bitmap(Bitmap(dataBANK[0]["lineimage" + pos]).bitmapData); 
} 

任何解決方案?

回答

2

一種方法是返回新的字符串,並將其分配給測試:

private var test:String = "KKK"; 
trace (" Before --->>> " + test); 
test = testFunction(test); 
trace (" Next --->>> " + test); 

private function testFunction(d:String):String{ 
    d = "MMM"; 
    return d; 
} 

這仍然沒有通過實際的字符串對象,但測試字符串會改變。字符串是按值在AS3過去了,如果你wan't實際上通過它你可以在一個對象包裝它:

var object:Object { 
    "test":"KKK" 
}; 
trace (" Before --->>> " + object["test"]); 
testFunction(object); 
trace (" Next --->>> " + object["test"]); 

private function testFunction(o:Object):void{ 
    o["test"] = "MMM"; 
} 
+0

謝謝,但請檢查我的問題,我添加了我現在的主要問題。 –

2

你需要將它包裝在一個類的實例:

class StringValue{ 
    function StringValue(value : String) : void{ 
     this.value = value; 
    } 
    public var value : String; 

    public function toString() : String{ 
     return value; 
    } 
} 


private var test:StringValue = new StringValue("KKK"); 
trace (" Before --->>> " + test);//traces 'KKK' 
testFunction(test); 
trace (" Next --->>> " + test);//traces 'MMM' 

private function testFunction(d:StringValue):void{ 
    d.value = "MMM"; 
}