(转)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、正常运行的情况(匿名函数):
(转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用的更多相关文章
- js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?
在js中我们都知道call/apply,还有比较少用的bind;传入的第一个参数都是改变函数当前上下文对象; call/apply区别在于传的参数不同,一个是已逗号分隔字符串,一个以数组形式.而bin ...
- EXT经验--在调试中通过查看handler的第一个参数的xtype得知该参数信息及该handler的归属
EXT模拟了OPP的思想,因此很多问题可以像JAVA语音那样去思考它.在实际阅读EXT时,常常需要我们搞清楚某个函数.某个对象的归属.如某个参数变量.方法属于哪个类,如下: 这是我今天在群中发出的问题 ...
- jq中$(function(){})和js中window.onload区别
先看下执行代码: $(function(){ console.log("jq");}) $(function(){ console.log("jq1") ...
- 当call/apply传的第一个参数为null/undefined的时候js函数内执行的上下文对象是什么呢?
如题:在js中我们都知道call/apply,还有比较少用的bind;传入的第一个参数都是改变函数当前上下文对象;call/apply区别在于传的参数不同,一个是已逗号分隔字符串,一个以数组形式.而b ...
- Javascript中的apply与call详解
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 一.方法定义 1.call 方法 语法:call([thisObj[,arg1[, arg2[, [,.arg ...
- 详解js中的apply与call的用法
前言 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.call 和 apply二者的作用完全一样,只是接受 ...
- Javascript 中的 apply与call详解
一.方法定义 1.call 方法 语法:call(thisObj,arg1, arg2, argN) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选 ...
- js中的apply与call的用法与区别
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.call 和 apply二者的作用完全一样,只是接受参数的 ...
- Function.apply()在提升程序性能方面的技巧
我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所有参数中的最大值. 比如 alert(Math.max(5,8)) //8alert(Math.max(5,7 ...
随机推荐
- Java多线程编程——wait()和notify()、notifyAll()
1.源码 wait() notify() notifyAll()都是Object类中方法.源码如下所示: public final native void notify(); public final ...
- Arduino可穿戴教程之第一个程序——连接硬件选择板子(二)
Arduino可穿戴教程之第一个程序——连接硬件选择板子(二) 2.4.2 连接硬件 在选择好示例程序后就可以将LilyPad通过LilyPad编程器连接到电脑了. 2.4.3 选择板子 如果你了 ...
- 【20181026T2】**图【最小瓶颈路+非旋Treap+启发式合并】
题面 [错解] 最大最小?最小生成树嘛 蛤?还要求和? 点分治? 不可做啊 写了个MST+暴力LCA,30pts,140多行 事后发现30分是给dijkstra的 woc [正解] 树上计数问题:①并 ...
- 什么是ClassLoader
ClassLoader 做什么的? 顾名思义,它是用来加载 Class 的.它负责将 Class 的字节码形式转换成内存形式的 Class 对象.字节码可以来自于磁盘文件 *.class,也可以是 j ...
- URAL 1993 This cheeseburger you don't need 模拟题
This cheeseburger you don't need 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=1993 Descrip ...
- keras实现mnist数据集手写数字识别
一. Tensorflow环境的安装 这里我们只讲CPU版本,使用 Anaconda 进行安装 a.首先我们要安装 Anaconda 链接:https://pan.baidu.com/s/1AxdGi ...
- linux基础命令学习(一)系统的关机、重启以及注销
1.shutdown shutdown 参数说明: [-t] 在改变到其它runlevel之前﹐告诉init多久以后关机. [-r] 重启计算器[reboot]. [-k] 并不真正关机﹐只是送警告信 ...
- pom通用依赖
<dependencies><!--common--><dependency><groupId>com.google.guava</groupId ...
- CentOS 6.9/7安装Parse+PostgreSQL
一.安装Parse-Server # npm install -g parse-server --unsafe-perm 备注:用--unsafe-perm参数的目的是使用了root权限进行安装. 二 ...
- HTML5开发的翻页效果实例
简介2010年F-i.com和Google Chrome团队合力致力于主题为<20 Things I Learned about Browsers and the Web>(www.20t ...