1. 程式人生 > >as3.0 Function.apply()與Function.call()方法簡介

as3.0 Function.apply()與Function.call()方法簡介

Function:函式是可在 ActionScript 中呼叫的基本程式碼單位。 ActionScript 中使用者定義的函式和內建函式都由 Function 物件來表示,該物件是 Function 類的例項。

類的方法與 Function 物件略有不同。 與普通函式物件不同,方法和與其關聯的類物件緊密關聯。 因此,方法或屬性具有在同一類的所有例項中共享的定義。 可以從例項提取方法並將其處理為“繫結”方法(保留與原始例項的連結)。 對於繫結方法,this 關鍵字指向實現該方法的原始物件。 對於函式,this 在呼叫函式時指向關聯物件。

1、apply(thisObject : Object,argArray : Array = null

)函式:

指定要在 ActionScript 呼叫的任何函式內使用的 thisObject 的值。 此方法還指定要傳遞給任何被呼叫函式的引數。 由於 apply() 是 Function 類的方法,所以它也是 ActionScript 中每個 Function 物件的方法。

與 Function.call() (它將引數指定為用逗號分隔的列表)不同,該方法將引數指定為一個 Array 物件。 如果在指令碼實際執行前,無法知道要傳遞的引數的數量,那麼這種方法通常很有用。

返回被呼叫函式指定為返回值的值。

引數:

     

1)、thisObject:Object   要應用該函式的物件。

      2)、argArray:Array (default = null)   其元素作為引數傳遞給函式的陣列。



2、call(thisObject : Object, ...args)函式:

呼叫 Function 物件表示的函式。 ActionScript 中的每個函式都由一個 Function 物件來表示,所以所有的函式都支援此方法。

幾乎在所有的情形下,都可以使用函式呼叫運算子 (()) 來代替此方法。 函式呼叫運算子使程式碼簡明易讀。 如果需要顯式控制函式呼叫中的 thisObject

 引數,則此方法很有用。 通常,如果在函式體內將函式作為物件的方法來呼叫,則 thisObject 設定為 myObject,如下例所示:

		myObject.myMethod(1,2,3);

	在某些情況下,可能希望 thisObject 指向其它地方;例如,函式必須作為物件的方法進行呼叫,但該函式實際上並不作為該物件的方法進行儲存(使用的是某個物件myObject的方法,但是方法呼叫的是另一個物件myOtherObject):               					 	 myObject.myMethod(myOtherObject,1,2,3);

	可以為 thisObject 引數傳遞值 null,以便將函式作為一個常規函式而非物件的方法來呼叫。例如,以下函式呼叫是等效的:
    Math.sin(Math.PI / 4); 
    Math.sin(null,Math.PI / 4);
 
 

引數:

1)、thisObject:Object   指定函式體內thisObject值得物件。

2)、parameter1:String (default = null)   要傳遞給該函式的引數,可指定0個或多個引數



例項程式碼:

var jimmy:Object = new Object();

jimmy.addSalary = function(addSalary:uint):void{
    trace("姓名:",this.name,",原工資:",this.salary,",新工資:",this.salary + addSalary);
};


jimmy.name = "jimmy.yang";
jimmy.salary = 3000;
jimmy.addSalary(500);
//姓名: jimmy.yang ,原工資: 3000 ,新工資: 3500




var mike:Object = new Object();
mike.name = "Mike";
mike.salary = 5000; 
jimmy.addSalary.call(jimmy,1000);
//姓名: jimmy.yang ,原工資: 3000 ,新工資: 4000
jimmy.addSalary.call(mike,1000);
//姓名: Mike ,原工資: 5000 ,新工資: 6000   


jimmy.addSalary.apply(jimmy,[1000]);
//姓名: jimmy.yang ,原工資: 3000 ,新工資: 4000
jimmy.addSalary.apply(mike,[1000]);
//姓名: Mike ,原工資: 5000 ,新工資: 6000