| 套件 | 最上層 |
| 類別 | 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
隱藏繼承公用屬性
顯示繼承公用屬性