as3.0 Function.apply()与Function.call()方法简介

Function:函数是可在 ActionScript 中调用的基本代码单位。 ActionScript 中用户定义的函数和内置函数都由 Function 对象来表示,该对象是 Function 类的实例。

类的方法与 Function 对象略有不同。 与普通函数对象不同,方法和与其关联的类对象紧密关联。 因此,方法或属性具有在同一类的所有实例中共享的定义。 可以从实例提取方法并将其处理为“绑定”方法(保留与原始实例的链接)。 对于绑定方法,this 关键字指向实现该方法的原始对象。 对于函数,this 在调用函数时指向关联对象。

1、apply():

指定要在 ActionScript 调用的任何函数内使用的 thisObject 的值。 此方法还指定要传递给任何被调用函数的参数。 由于 apply() 是 Function 类的方法,所以它也是 ActionScript 中每个 Function 对象的方法。

与 Function.call() (它将参数指定为用逗号分隔的列表)不同,该方法将参数指定为一个 Array 对象。 如果在脚本实际执行前,无法知道要传递的参数的数量,那么这种方法通常很有用。

返回被调用函数指定为返回值的值。

参数:

1)、thisObject:Object   要应用该函数的对象。

2)、argArray:Array (default = null)   其元素作为参数传递给函数的数组。

 

2、call():

调用 Function 对象表示的函数。 ActionScript 中的每个函数都由一个 Function 对象来表示,所以所有的函数都支持此方法。

几乎在所有的情形下,都可以使用函数调用运算符 (()) 来代替此方法。 函数调用运算符使代码简明易读。 如果需要显式控制函数调用中的 thisObject 参数,则此方法很有用。 通常,如果在函数体内将函数作为对象的方法来调用,则 thisObject 设置为 myObject,如下例所示:

1 myObject.myMethod(1,2,3);

在某些情况下,您可能希望 thisObject 指向其它地方;例如,函数必须作为对象的方法进行调用,但该函数实际上并不作为该对象的方法进行存储。

1 myObject.myMethod.call(myOtherObject,1,2,3);

可以为 thisObject 参数传递值 null,以便将函数作为一个常规函数而非对象的方法来调用。 例如,以下函数调用是等效的:

1 Math.sin(Math.PI / 4);
2 Math.sin.call(null, Math.PI / 4);

返回被调用函数指定为返回值的值。

参数:

1)、thisObject:Object   指定函数体内thisObject值得对象。

2)、parameter1:String (default = null)   要传递给该函数的参数,可指定0个或多个参数。

 

实例代码如下:

 1 var jimmy:Object = new Object();
 2 //定义jimmy对象的一个方法
 3 jimmy.addSalary = function(addSalary:uint):void{
 4     trace("姓名:",this.name,",原工资:",this.salary,",新工资:",this.salary + addSalary);
 5 };
 6 
 7 jimmy.name = "jimmy.yang";
 8 jimmy.salary = 3000;
 9 jimmy.addSalary(500);
10 //姓名: jimmy.yang ,原工资: 3000 ,新工资: 3500
11 
12 
13 var mike:Object = new Object();
14 mike.name = "Mike";
15 mike.salary = 5000; 
16 jimmy.addSalary.call(jimmy,1000);
17 //姓名: jimmy.yang ,原工资: 3000 ,新工资: 4000
18 jimmy.addSalary.call(mike,1000);
19 //姓名: Mike ,原工资: 5000 ,新工资: 6000   
20 
21 jimmy.addSalary.apply(jimmy,[1000]);
22 //姓名: jimmy.yang ,原工资: 3000 ,新工资: 4000
23 jimmy.addSalary.apply(mike,[1000]);
24 //姓名: Mike ,原工资: 5000 ,新工资: 6000

 

posted @ 2013-03-15 14:00  【Winco】  阅读(995)  评论(0编辑  收藏  举报