Actionscript передать по ссылке - PullRequest
       12

Actionscript передать по ссылке

4 голосов
/ 14 сентября 2010
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 по умолчанию
), почему он не был изменен?

1 Ответ

4 голосов
/ 14 сентября 2010

Вы не передаете ссылку.Вы передаете null, который назначен локальной переменной obj для использования в функции.

Передача аргументов по значению или по ссылке :

Передача по ссылке означает, что передается только ссылка на аргументвместо фактической стоимости.Копия фактического аргумента не производится.Вместо этого создается ссылка на переменную, переданную в качестве аргумента, и назначается локальной переменной для использования внутри функции.

В createObj вы создаете новую ссылку, которую вы должны вернуть:

public function test1() {
  tmp = createObj();
  if(tmp != null) {
    trace("Hello World!");
  }
}

private function createObj():Object {
  return new Object();
}
...