函数作为对象

ActionScript 3.0 中的函数是对象。当您创建函数时,就是在创建对象,该对象不仅可以作为参数传递给另一个函数,而且还可以有附加的属性和方法。

作为参数传递给另一个函数的函数是按引用(而不是按值)传递的。在将某个函数作为参数传递时,只能使用标识符,而不能使用在调用方法时所用的小括号运算符。例如,下面的代码将名为 clickListener() 的函数作为参数传递给 addEventListener() 方法:

addEventListener(MouseEvent.CLICK, clickListener);

Array.sort() 方法也定义了一个接受函数的参数。有关用作 Array.sort() 函数参数的自定义排序函数的示例,请参阅对数组排序

尽管刚接触 ActionScript 的程序员可能对此感觉有些奇怪,但是,函数确实可以像其它任何对象那样具有属性和方法。实际上,每个函数都有一个名为 length 的只读属性,它用来存储为该函数定义的参数数量。该属性与 arguments.length 属性不同,后者报告发送给函数的参数数量。回想一下,在 ActionScript 中,发送给函数的参数数量可以超过为该函数定义的参数数量。下面的示例说明了这两个属性之间的区别,此示例仅在标准模式下编译,因为严格模式要求所传递的参数数量与所定义的参数数量完全相同:

function traceLength(x:uint, y:uint):void
{
    trace("arguments received: " + arguments.length);
    trace("arguments expected: " + traceLength.length);
}

traceLength(3, 5, 7, 11);
/* 输出:
收到的参数数量:4
需要的参数数量:2 */

您可以定义自己的函数属性,方法是在函数体外部定义它们。函数属性可以用作准静态属性,用来保存与该函数有关的变量的状态。例如,您可能希望跟踪对特定函数的调用次数。如果您正在编写游戏,并且希望跟踪用户使用特定命令的次数,则这样的功能会非常有用,尽管您也可以使用静态类属性来实现此目的。下面的代码在函数声明外部创建一个函数属性,在每次调用该函数时都递增此属性:

someFunction.counter = 0;

function someFunction():void
{
    someFunction.counter++;
}

someFunction();
someFunction();
trace(someFunction.counter); // 2

Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000056.html