在呼叫執行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
沒有留言:
張貼留言