(转)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中以post和get方式提交数据


下一篇:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.9.3.