(转)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、无法正常的运行的情况:

 

(转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用

 

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

 

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

(转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用

(转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用

上一篇:Android图形解锁的绘制


下一篇:[安卓】Error和Exception的区别