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

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

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

1、apply(thisObject : Object,argArray : Array = null)函数:

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

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

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

参数:

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

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



2、call(thisObject : Object, ...args)函数:

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

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

		myObject.myMethod(1,2,3);

	在某些情况下,可能希望 thisObject 指向其它地方;例如,函数必须作为对象的方法进行调用,但该函数实际上并不作为该对象的方法进行存储(使用的是某个对象myObject的方法,但是方法调用的是另一个对象myOtherObject):               					 	 myObject.myMethod(myOtherObject,1,2,3);

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

参数:

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

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



实例代码:

var jimmy:Object = new Object();

jimmy.addSalary = function(addSalary:uint):void{
    trace("姓名:",this.name,",原工资:",this.salary,",新工资:",this.salary + addSalary);
};


jimmy.name = "jimmy.yang";
jimmy.salary = 3000;
jimmy.addSalary(500);
//姓名: jimmy.yang ,原工资: 3000 ,新工资: 3500




var mike:Object = new Object();
mike.name = "Mike";
mike.salary = 5000; 
jimmy.addSalary.call(jimmy,1000);
//姓名: jimmy.yang ,原工资: 3000 ,新工资: 4000
jimmy.addSalary.call(mike,1000);
//姓名: Mike ,原工资: 5000 ,新工资: 6000   


jimmy.addSalary.apply(jimmy,[1000]);
//姓名: jimmy.yang ,原工资: 3000 ,新工资: 4000
jimmy.addSalary.apply(mike,[1000]);
//姓名: Mike ,原工资: 5000 ,新工资: 6000

猜你喜欢

转载自blog.csdn.net/w2014qian/article/details/47614665
今日推荐