AS3 httpservice - 通过引用将参数传递给事件处理程序

时间:2010-04-09 22:36:51

标签: actionscript-3 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),但如果我在闭包中执行它,则会通过值传递。有没有办法通过引用来完成它,而无需在搜索对象数组中搜索结果中返回的值?

2 个答案:

答案 0 :(得分:1)

我不太清楚你想在这做什么。

参数确实是按值传递的。在对象的情况下(对象在这里我指的是所有具有引用语义的东西,即除了布尔值,数字,整数,字符串等之外的所有内容),对它们的引用都是按值传递的,所以在你的函数中你有一个引用原始对象,而不是对象副本的引用。

所以,如果你想取消引用对象并改变一些值或者在它上面调用一些方法,你就可以了。唯一不起作用的是改变引用本身;即,您不能将其清空或为其分配新对象:

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

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

dereferenceParam()将按照大多数人的预期工作,reassignParam不会。

现在,根据你的上一段,我认为你唯一可能遇到的“问题”就是你要从你拥有的某个数组中删除或删除搜索对象。我担心在那种情况下,唯一的办法就是遍历数组。

答案 1 :(得分:0)

您如何确定您收到了该物品的副本?

据我所知,(非内在)对象几乎从不按值复制。唯一的例外是调度的Event个对象,但这是明确记录的。