2010-04-09 61 views
0

參數傳遞給事件處理程序我有這樣的代碼:AS3的HTTPService - 通過參考

var service:HTTPService = new HTTPService(); 
if (search.Location && search.Location.length > 0 && chkLocalSearch.selected) { 
    service.url = 'http://ajax.googleapis.com/ajax/services/search/local'; 
    service.request.q = search.Keyword; 
    service.request.near = search.Location; 
} else 
{ 
    service.url = 'http://ajax.googleapis.com/ajax/services/search/web'; 
    service.request.q = search.Keyword + " " + search.Location; 
} 
service.request.v = '1.0'; 
service.resultFormat = 'text'; 
service.addEventListener(ResultEvent.RESULT, onServerResponse); 
service.send(); 

我想通過搜索對象的結果方法(onServerResponse),但如果我在一個封閉做到這一點它得到按價值傳遞。有沒有辦法通過引用來做到這一點,而無需搜索結果中返回的值的搜索對象數組?

回答

1

我不太清楚你想在這裏做什麼。

參數確實按值傳遞。在對象的情況下(這裏的對象是指引用語義的所有東西,比如布爾值,數字,整數,字符串等等),對它們的引用是通過值傳遞的,所以在函數中你可以引用原始對象,而不是對象副本的引用。所以,如果你想解引用對象,改變一些值或者調用一些方法,你會沒事的。唯一不行的是改變參考本身;即你不能空出來或指定一個新的對象吧:

function dereferenceParam(param:Object):void { 
    param.someInt = 4; 
    param.someMethod(); 
} 

function reassignParam(param:Object):void { 
    param = null; 
    // or 
    param = new Object(); 
} 

dereferenceParam()將作爲大多數人的期待,reassignParam不會。

現在,我認爲你可能有最後一段的唯一可能的「問題」是你想從你有的數組中刪除或空出搜索對象。恐怕在這種情況下,唯一的方法就是循環訪問數組。

+0

我想將搜索傳遞給onServerResponse。 – Shawn 2010-04-10 15:20:16

+0

是的,但我不明白爲什麼使用閉包方法不起作用。我想也許你想從你的數組中刪除搜索對象,在這種情況下,你需要訪問數組。否則,您將得到的搜索參數是對原始對象的引用的副本。只要你使用引用,你就可以訪問原始對象。所以,如果你想改變搜索對象的值或者調用一些方法,你應該沒有問題。 – 2010-04-10 15:30:50

+0

不,我得到一個對象副本的引用,而不是引用的副本。 – Shawn 2010-04-27 20:22:22

0

你如何確定你已收到對象的副本?

據我所知,(非內在的)對象幾乎不會被值複製。唯一的例外是派發Event對象,但明確記錄。