| 包 | 顶级 | 
| 类 | public dynamic class Function | 
| 继承 | Function    Object | 
| 语言版本: | ActionScript 3.0 | 
| 运行时版本: | AIR 1.0 Flash Player 9 | 
类的方法与 Function 对象略有不同。与普通函数对象不同,方法和与其关联的类对象紧密关联。因此,方法或属性具有在同一类的所有实例中共享的定义。可以从实例提取方法并将其处理为“绑定”方法(保留与原始实例的链接)。对于绑定方法,this 关键字指向实现该方法的原始对象。对于函数,this 在调用函数时指向关联对象。
另请参见
| 方法 | 定义方 | ||
|---|---|---|---|
  指定要在 ActionScript 调用的任何函数内使用的 thisObject 的值。  | Function | ||
  调用 Function 对象表示的函数。  | Function | ||
![]()  | 
  指示对象是否已经定义了指定的属性。  | Object | |
![]()  | 
  指示 Object 类的实例是否在指定为参数的对象的原型链中。  | Object | |
![]()  | 
  指示指定的属性是否存在、是否可枚举。  | Object | |
![]()  | 
     设置循环操作动态属性的可用性。  | Object | |
![]()  | 
  返回指定对象的字符串表示形式。  | Object | |
![]()  | 
  返回指定对象的原始值。  | Object | |
| apply | () | 方法 | 
 AS3 function apply(thisArg:*, argArray:*):*| 语言版本: | ActionScript 3.0 | 
| 运行时版本: | AIR 1.0 Flash Player 9 | 
  指定要在 ActionScript 调用的任何函数内使用的 thisObject 的值。此方法还指定要传递给任何被调用函数的参数。由于 apply() 是 Function 类的方法,所以它也是 ActionScript 中每个 Function 对象的方法。 
  
与 Function.call() (它将参数指定为用逗号分隔的列表)不同,该方法将参数指定为一个 Array 对象。如果在脚本实际执行前,无法知道要传递的参数的数量,那么这种方法通常很有用。
返回被调用函数指定为返回值的值。
参数
thisArg:* (default = NaN) — 要应用该函数的对象。
     | |
argArray:* (default = NaN) — 其元素作为参数传递给函数的数组。
     | 
* — 调用函数指定的任何值。
       | 
另请参见
| call | () | 方法 | 
 AS3 function call(thisArg:*, ... args):*| 语言版本: | ActionScript 3.0 | 
| 运行时版本: | AIR 1.0 Flash Player 9 | 
调用 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 — 要传递给该函数的参数。可以指定 0 个或多个参数。
     | 
* | 
另请参见
FunctionExample、SimpleCollection、EventBroadcaster 和 EventListener 类显示 ActionScript 中函数的各种用法。这是由以下步骤完成的:
 FunctionExample 的构造函数创建一个名为 simpleColl 的局部变量,该变量用一个整数数组填充,其范围从 1 到 8。 trace() 打印 simpleColl 对象。listener 添加到 simpleColl 中。insert() 和 remove() 函数时,侦听器响应其事件。greaterThanFourColl。greaterThanFourColl 对象 simpleColl.select() 的结果,后者包含参数 4 和一个匿名函数。SimpleCollection 对象的选择方法是一个内部迭代器,它使用匿名函数参数作为块。
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);        
    }
}