(转)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、正常运行的情况(匿名函数):
最新文章
- [LeetCode] Best Time to Buy and Sell Stock II
- Android事件分发机制(上)
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Git安装图解
- 外网主机访问虚拟机下的web服务器(NAT端口转发)
- 字节流和字符流(PrintStream类和PrintWiter类)
- c#开发Mongo笔记第四篇
- 解决VC几个编译问题的方法——好用
- R.id.layout等不能识别:cannot be resolved or is not a field
- Oracle创建删除用户,角色,表空间,导入导出数据库命令总结(转载)
- 深入理解object C中复制对象的用法(二)
- ASP.NET快速学习方案(.NET菜鸟的成长之路)
- numpy使用总结
- 学习 javascript (一)javascript 简介
- ZOJ 3795 Grouping (强连通缩点+DP最长路)
- Spring Data JPA使用getOne方法报错:Method threw 'org.hibernate.LazyInitializationException' exception. Cannot evaluate
- 20155326刘美岑 Exp6 信息收集与漏洞扫描
- 《Gradle权威指南》--Android Gradle高级自定义
- HIVE简单操作
- AdminLTE 文档
热门文章
- CodeForces 785D Anton and School - 2
- React Native 系列(二)
- RxSwift 系列(二)
- socket的使用二
- FastReport.Net使用:[10]报表栏目说明
- NOIP 2018 提高组初赛解题报告
- BZOJ1016 JSOI2008最小生成树计数
- 【矩阵快速幂优化DP】【校内测试】
- hdu 3294 manacher 求回文串
- 内功心法 -- java.util.LinkedList<;E>; (7)