2010年4月8日 星期四

呼叫Function,參數以值傳遞與物件傳遞的差異


在呼叫執行function時,參數以物件傳遞與以變數傳遞是有相當的不同的
如果以變數傳遞,變數值傳到function內會變成一個獨立的值,傳入後就與function外部無關
若是把變數包在一個外部的物件上,改傳入物件,則在function內改變物件內的變數值
改變到的是funcion外部的物件,就會跟其他程式發生關聯,也就是說傳遞到function內的
物件可以看作只是一個物件的參考

用物件傳遞的好處是,若希望做非同步多function依序執行
以物件傳遞,可以達到,在function真正要執行時,
才透過物件參考取到要傳進去的值
也就是說只要利用一個class變數的object,來傳遞,要在各個function交換的值

以下範例,是不考慮非同步執行的虛擬程式碼

值傳遞

class MyClass{
 protected var x=1
 public function MyClass():void{
  run1(x);
  run2(x)
 }
 public function run1(_input:int):void{
  _input++;
  trace('run1=',x)
 }
 public function run2(_input):void{
  _input++;
  trace('run2=',x)
 }
}

得到的結果是
run1=1
run2=1

物件傳遞

class MyClass2{
 protected var infoObj:Object=new Object();
 public function MyClass2():void{
  infoObj.x=1;
  run1(infoObj);
  run2(infoObj)
 }
 public function run1(_info:Object):void{
  _info.x++;
  trace('run1=',infoObj.x)
 }
 public function run2(_info:Object):void{
  _info.x++;
  trace('run2=',infoObj.x)
 }
}

得到的結果是
run1=2
run2=3

沒有留言: