zoukankan      html  css  js  c++  java
  • 详细说说ActionScript中function的call()方法和apply()方法

    详细说说ActionScript中function的call()方法和apply()方法
    今天看到function的call和apply这两个方法,上网查了一下,有人说这两个方法是用来动态改变函数指向,并给了一个例子:如下

     import customize.my_class;
      
        public var _property:String;
      
        public function init():void
        { 
            var fn:Function = new Function();
            fn = function(...args):void
            {
                this._property = args;
            }
       
            var __obj:my_class = new my_class();
            //fn.call(__obj, "给属性赋值");
            fn.apply(__obj, new Array("给属性赋值"));
       
           trace(__obj._property);
        }
    =====================================
    定义的my_class类
    public class my_class
    {
          public var _property:String;
          public function my_class()
          {
              this._property = "somiok";
          }
    }

    从上面代码可见fn函数是用函数表达式形式申明的,此时是可以动态改变函数指向的(也就是函数的this关键字随着函数的附着而改变)。

    而我用函数语句形式试了一下,函数并不能动态改变自己的指向,只能起到执行函数的作用。

    import customize.my_class;

    public var _property:String;

    public function init():void

     var __obj:my_class = new my_class();
     //fn.call(__obj, "给属性赋值");
     fn.apply(__obj, new Array("给属性赋值"));
     
     trace(__obj._property);
    }

    private function fn(...args):void
    {
     this._property = args.toString();
    }
    =====================================
     定义的my_class类
    public class my_class
    {
     public var _property:String;
     public function my_class()
     {
      this._property = "somiok";
     }
    }

    后来查了黑羽老大的书:函数语句定义法和函数表达式定义法的不同还体现在this关键字的记忆上。使用函数语句定义法,则this关键字牢牢指向当前函数定义的域;若使用函数表达式定义法,则随着函数附着的对象不同,this关键字也随之改变。

    语句定义法需先声明后调用的原则。
    总结:如果函数是函数语句定义的形式:则call方法和apply方法只起到执行函数的作用。

    如果函数是函数表达式定义形式:则call方法和apply方法起到动态改变函数指向,同时改变被指向类的一些属性。

  • 相关阅读:
    javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)
    javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
    javascript数据结构与算法---检索算法(顺序查找、最大最小值、自组织查询)
    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
    ThinkPHP5中Session的使用
    能让你少写1000行代码的20个正则表达式
    composer 安装
    thinkphp5.0 实现图片验证效果且能点击图片刷新图片
    thinkphp5.0 实现单文件上传功能
    thinkphp5.0 输入变量
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717047.html
Copyright © 2011-2022 走看看