当前位置:  开发笔记 > 编程语言 > 正文

如何在ActionScript中通过引用传递?

如何解决《如何在ActionScript中通过引用传递?》经验,为你挑选了1个好方法。

我正在尝试修改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的传递引用逻辑有一些我不理解的东西.因为我期待myObjectMainClass.as也会改变.

我该怎么做才能直接修改函数参数(myObject)的值?

谢谢 !



1> MattDavey..:

问题在于事件处理程序中的这一行:

the_object = JSON.parse(loader.data);

在您执行此操作的那一刻,您将不再处理传递给方法的对象.您正在为名为的局部变量分配新值the_object.重要的是要理解对象不是通过引用传递的 - 对象引用是按值传递的.所以the_object在你的方法中是参考的副本.分配新值时,将使用其他引用覆盖该副本.

解决方案是通过引用传递引用 - 这与C++等语言中的双指针概念有关,也称为双间接.我不确定这在ActionScript中是否可行.

一个更好的解决方案,只需返回反序列化的对象作为返回值.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有