首页 > 移动平台 > 详细

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

时间:2014-02-11 16:43:26      阅读:389      评论:0      收藏:0      [点我收藏+]

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

 

bubuko.com,布布扣

 

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

 

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

bubuko.com,布布扣

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

原文:http://www.cnblogs.com/wonderKK/p/3544030.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!