zoukankan      html  css  js  c++  java
  • (转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用

    http://blog.csdn.net/linjf520/article/details/8746064

    大家在使用Function.apply或是call时,是否发现,第一个参数不知道怎么用,赋值了也没反应;

    没反应的情况,是因为你的这个Function是普通的类成员函数

    重点总结:

    从这点我们可以知道:AS3中的普通函数,与匿名函数的this区别(这个发现与JS的一样)

    因为,普通类成员函数中,的this都是指当前实例对象的引用;

    而,匿名函数中,的this都是指当前执行该匿名函数的thisObj参数;

    看apply,call的描述中,第一个参数的说明是,要应用该方法的对象;如何理解?

    难道是,

    class A

    {

      public var name:String="a";

      public function handler():void{

        trace(this.name);

      }

    }

    class B{

      public var name:String="b";

    }

    var a:A= new A();

    var func:Function=a.handler;

    func.apply(new B);

    这里的func.apply(new B);以上面的描述中:第一个参数的说明是,要应用该方法的对象;难不成是等价于:(new B).handler();??

    其实不是的,这里文档、注释的说明是比较不清楚的;

    真正的理解,还得靠自己实验之后才知道,传进了第一个参数,在函数运行时,就是函数中带有this的关键字才都代换成对应第一个参数为值;

    即:

      public function handler():void{

        trace(this.name);

      }

    代码中,trace(this.name);在调用:func.apply(new B);之后,trace(this.name);==>trace((new B).name);的意思了;

    但以上面这种方式,运行,大家有没有发现,怎么运行的结果都是"a";

    无论你传什么对象进去,都看到不你想要的name值;

    原因是,第一个传参的应用函数情况不同而起作用:

    1、一般的普通类函数成员无法正常使用(即:传个null或对象,或是不传都一个样);

    2、对象匿名函数有用;

    如下图看结果:

    1、无法正常的运行的情况:

    按函数的注释介绍应该输入:2222222才对的;

    2、正常运行的情况(匿名函数):

  • 相关阅读:
    codesmith 连接mysql
    数据库 价格字段 设置 decimal(8,2),价格为100W,只显示999999.99
    AOP和IOC
    Android Studio 每次运行都会再下载一遍,修改
    gradle 的jar下载到哪里了
    遇到的坑
    Error:Failed to resolve: :Base:
    re-download dependencies and 无法下载jar 的解决
    DI是实现面向切面和面向抽象的前提
    基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
  • 原文地址:https://www.cnblogs.com/wonderKK/p/3544030.html
Copyright © 2011-2022 走看看