套件 | 最上層 |
類別 | public final class Function |
繼承 | Function Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
類別的方法與 Function 物件稍有不同。 不同於普通的函數物件,方法會緊密連結至與其關聯的類別物件。 因此,方法或屬性都具有在相同類別之所有實體中共用的定義。 方法可以從實體擷取並被視為「繫結」方法 (保留對原始實體的連結)。 對於繫結方法,this
關鍵字會指向實作該方法的原始物件。 對於函數來說,this
則會在叫用該函數時指向關聯物件。
方法 | 定義自 | ||
---|---|---|---|
指定要在 ActionScript 所呼叫的任何函數中使用的 thisObject 值。 | Function | ||
叫用由 Function 物件所代表的函數。 | Function | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object |
apply | () | 方法 |
AS3 function apply(thisArg:*, argArray:*):*
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指定要在 ActionScript 所呼叫之任何函數中使用的 thisObject
值。 這個方法也可以指定要傳遞給任何被呼叫函數的參數。 因為 apply()
是 Function 類別的方法,所以也是 ActionScript 中每一個 Function 物件的方法。
這些參數都會指定為 Array 物件,而不是像 Function.call()
將參數指定為逗點分隔的清單。 如果要傳遞的參數數目要等到程式碼實際執行時才會知道,就可以使用這個方法。
會傳回呼叫函數指定為傳回值的值。
參數
thisArg:* (default = NaN ) — 要套用函數的物件。
| |
argArray:* (default = NaN ) — 其元素會當做參數傳遞給函數的陣列。
|
* — 被呼叫函數指定的任何值。
|
相關 API 元素
call | () | 方法 |
AS3 function call(thisArg:*, ... args):*
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
叫用由 Function 物件所代表的函數。 ActionScript 中的每一個函數都是用 Function 物件來表示,因此所有函數都支援這個方法。
幾乎在所有的情況下,都可以用函數呼叫運算子 (()
) 來取代這個方法。 函數呼叫運算子會產生簡潔易讀的程式碼。 這個方法的主要應用時機是在函數叫用過程中,必須對 thisObject
參數明確地加以控制的時候。 一般來說,如果將函數當做函數主體內的物件方法來叫用,thisObject
便會設定為 myObject
,如下列範例所示:
myObject.myMethod(1, 2, 3);
在某些情況下,您可能會希望 thisObject
指向別處;例如,如果必須將函數當做物件的方法來叫用,但是不要將它實際儲存為該物件的方法時:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
您可以為 thisObject
參數傳遞 null
值,將函數當做一般函數 (而非物件的方法) 來叫用。 例如,下列兩種函數叫用過程是相等的:
Math.sin(Math.PI / 4) Math.sin.call(null, Math.PI / 4)
會傳回呼叫函數指定為傳回值的值。
參數
thisArg:* (default = NaN ) — 指定函數主體內 thisObject 值的物件。
| |
... args — 要傳遞給函數的一個或多個參數。您可以指定零或多個參數。
|
* |
相關 API 元素
FunctionExample
、SimpleCollection
、EventBroadcaster
和 EventListener
類別來示範在 ActionScript 中使用函數的各種方式。 您可以使用下列步驟:
FunctionExample
的建構函式會建立名為simpleColl
的區域變數,此變數中會填入範圍從1
到8
的整數陣列。simpleColl
物件是使用trace()
所列印。- EventListener 物件
listener
會加入到simpleColl
。 - 當呼叫
insert()
和remove()
函數時,此偵聽程式會回應其事件。 - 會建立第二個名為
greaterThanFourColl
的 SimpleCollection 物件。 greaterThanFourColl
物件會被指定simpleColl.select()
的結果 (包含4
引數和匿名函數)。 SimpleCollection 物件的 select 方法是內部迴圈指標,它會使用匿名函數參數做為區塊。
package { import flash.display.Sprite; public class FunctionExample extends Sprite { public function FunctionExample() { var simpleColl:SimpleCollection; simpleColl = new SimpleCollection(0, 1, 2, 3, 4, 5, 6, 7, 8); trace(simpleColl); // 0, 1, 2, 3, 4, 5, 6, 7, 8 var listener:EventListener = new EventListener(); simpleColl.addListener(listener); simpleColl.insert(9); // itemInsertedHandler: 9 simpleColl.remove(8); // itemRemovedHandler: 8 trace(simpleColl); // 0, 1, 2, 3, 4, 5, 6, 7, 9 var greaterThanFourColl:SimpleCollection; greaterThanFourColl = simpleColl.select(4, function(item:int, value:int){ return item > value }); trace(greaterThanFourColl); // 5, 6, 7, 9 } } } import flash.display.Sprite; class EventBroadcaster { private var listeners:Array; public function EventBroadcaster() { listeners = new Array(); } public function addListener(obj:Object):void { removeListener(obj); listeners.push(obj); } public function removeListener(obj:Object):void { for(var i:uint = 0; i < listeners.length; i++) { if(listeners[i] == obj) { listeners.splice(i, 1); } } } public function broadcastEvent(evnt:String, ...args):void { for(var i:uint = 0; i < listeners.length; i++) { listeners[i][evnt].apply(listeners[i], args); } } } class SimpleCollection extends EventBroadcaster { private var arr:Array; public function SimpleCollection(... args) { arr = (args.length == 1 && !isNaN(args[0])) ? new Array(args[0]) : args; } public function insert(obj:Object):void { remove(obj); arr.push(obj); broadcastEvent("itemInsertedHandler", obj); } public function remove(obj:Object):void { for(var i:uint = 0; i < arr.length; i++) { if(arr[i] == obj) { var obj:Object = arr.splice(i, 1)[0]; broadcastEvent("itemRemovedHandler", obj); } } } public function select(val:int, fn:Function):SimpleCollection { var col:SimpleCollection = new SimpleCollection(); for(var i:uint = 0; i < arr.length; i++) { if(fn.call(this, arr[i], val)) { col.insert(arr[i]); } } return col; } public function toString():String { var str:String = new String(); for(var i:uint = 0; i < arr.length - 1; i++) { str += arr[i] + ", "; } str += arr[arr.length - 1]; return str; } } class EventListener { public function EventListener() { } public function itemInsertedHandler(obj:Object):void { trace("itemInsertedHandler: " + obj); } public function itemRemovedHandler(obj:Object):void { trace("itemRemovedHandler: " + obj); } }
Tue Jun 12 2018, 03:47 PM Z