我有这段代码:
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),但如果我在闭包中执行它,则会通过值传递。有没有办法通过引用来完成它,而无需在搜索对象数组中搜索结果中返回的值?
答案 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
个对象,但这是明确记录的。