• 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
  • 相关阅读:
    mysql数据库分区功能及实例详解
    Mysql线程池优化笔记
    mariadb multi-source replication(mariadb多主复制)
    mysql---二进制日志
    MySQL binlog_format (Mixed,Statement,Row)[转]
    如何生成唯一的server Id,server_id为何不能重复?
    mysql复制过程中的server-id的理解
    MySQL参数:innodb_flush_log_at_trx_commit 和 sync_binlog
    Mysql 用户和权限管理
    B+树索引和哈希索引的区别[转]
  • 原文地址:https://www.cnblogs.com/atong/p/2961293.html
Copyright © 2020-2023  润新知