【问题标题】:Actionscript pass by referenceActionscript 通过引用传递
【发布时间】:2010-09-14 11:24:33
【问题描述】:
package {
    import flash.display.Sprite;

public class test1 extends Sprite {

private var tmp:Object;

public function test1() {
  createObj(tmp);
  if(tmp == null) {
    trace("nothing changed");
  }
}

private function createObj(obj:Object):void {
  obj = new Object();
}

}
}

在上面的代码中,控制台上的输出是:
没有改变

为什么?

如果 createObj 的参数是通过引用传递的(即
actionscript 的默认行为),为什么它没有被修改?

【问题讨论】:

    标签: apache-flex actionscript-3 pass-by-reference


    【解决方案1】:

    您没有传递参考。您正在传递null,它被分配给局部变量obj,以便在函数中使用。

    Passing arguments by value or by reference:

    通过引用传递意味着 只有对论点的引用是 传递而不是实际值。不 实际参数的副本。 相反,对变量的引用 作为参数传递被创建和 分配给局部变量以供使用 在函数内。

    createObj 中,您正在创建一个必须返回的新引用:

    public function test1() {
      tmp = createObj();
      if(tmp != null) {
        trace("Hello World!");
      }
    }
    
    private function createObj():Object {
      return new Object();
    }
    

    【讨论】:

    • 您的回答解决了 OP 的问题,但我想补充一点,null 并没有真正改变这里的工作方式。文档写得太差了,真可惜。文档中的整个段落都是一团糟,几乎没有任何意义。 AS 将对象的引用存储在变量(或参数)中。引用是指向对象的“链接”,而不是对象本身。引用在传递给函数时被复制;所以它们被按值传递。 AS 具有传递值语义(这就是为什么您不能直接在 AS 中实现经典的“交换”示例的原因)。 AS 按值传递引用.
    • 附言。这是一篇很好的文章,解释了按引用传递和按值传递引用之间的区别:javadude.com/articles/passbyvalue.htm。它是关于 Java 的,但它也适用于 Actionscript。
    猜你喜欢
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2013-09-10
    • 2020-04-01
    • 1970-01-01
    • 2011-06-28
    • 2015-07-22
    相关资源
    最近更新 更多