【发布时间】:2013-05-02 20:06:57
【问题描述】:
我正在尝试修改另一个类中的Object。所以我有这样的事情:
MainClass.as:
..
var myObject:Object = new Object();
Class2_Instance.get_JSON(myObject);
trace(myObject.id); // output: undefined. whereas it should be 42. see below.
..
Class2.as
public function get_JSON(url:String , the_object:Object)
{
var request:URLRequest = new URLRequest(url);
var variables:URLLoader = new URLLoader();
variables.dataFormat = URLLoaderDataFormat.TEXT;
variables.addEventListener(Event.COMPLETE, Complete_Handler_JSON(the_object));
try
{
variables.load(request);
}
catch (error:Error)
{
trace("Unable to load URL: " + error);
}
}
function Complete_Handler_JSON(the_object:Object):Function
{
return function(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
the_object = JSON.parse(loader.data);
trace(the_object.id); //returns 42.
};
}
所以 JSON 操作在 Class2 中正确执行,并将 .parse() 值分配给 the_object,但我认为 AS 的传递引用逻辑有一些我不理解的地方。因为我期待 MainClass.as 中的 myObject 也会改变。
如何直接修改函数参数(myObject)的值?
谢谢!
【问题讨论】:
-
对象默认通过引用传递。 the_object 不是 myObject。在 Class2_Method 中创建后尝试返回 the_object。您可能会发现,从长远来看,最好采用其他设计而不是静态方法。
-
@AmyBlankenship 谢谢,今天我在从 CompleteHandler 返回时遇到了一些困难(因为他们等待 URLRequest 完成,我猜“异步”是术语),所以我试图找到一种方法没有回报的。非静态方法是什么意思?而且我认为我应该编辑我的问题以添加实际代码。
-
我真的很困惑。如果 the_object 不是 myObject,那么它是如何“通过引用”的?在 Adobe.com 手册中,它说 myObject 的值会改变,但它不会:/而且我不能从 CompleteHandler 返回。那么如何保存 JSON 数组呢?
-
因为你在调用 JSON.parse 的时候创建了一个新对象。所以你传入了_oobject,然后覆盖了它。
标签: actionscript-3 oop pass-by-reference