我正在尝试修改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的传递引用逻辑有一些我不理解的东西.因为我期待myObject
MainClass.as也会改变.
我该怎么做才能直接修改函数参数(myObject)的值?
谢谢 !
问题在于事件处理程序中的这一行:
the_object = JSON.parse(loader.data);
在您执行此操作的那一刻,您将不再处理传递给方法的对象.您正在为名为的局部变量分配新值the_object
.重要的是要理解对象不是通过引用传递的 - 对象引用是按值传递的.所以the_object
在你的方法中是参考的副本.分配新值时,将使用其他引用覆盖该副本.
解决方案是通过引用传递引用 - 这与C++等语言中的双指针概念有关,也称为双间接.我不确定这在ActionScript中是否可行.
一个更好的解决方案,只需返回反序列化的对象作为返回值.