Function类的重要方法call()与apply() http://www.xncat.com/?p=1568

一个热心网友说的简单明了:

"apply是针对不定个数参数函数   call是针对固定参数个数的函数,效果等同,是用于影响函数中的this引用指向的。"

在有些时间的特殊设计中,需要动态更改函数中的默认指向当前对象内部域 指向到其它对象中时,就可以用它了,但一般极少用!!!

一般就单纯用() 来直接调用函数就可以了。

import flash.display.MovieClip;

var mc1:MovieClip = new MovieClip()
var mc2:MovieClip = new MovieClip()

mc1.name = "mc1"
mc2.name = "mc2"

mc1.i = 123;
mc1.samcall = function(){
 trace("当前对象域是:" + this.name + " ,i的值是" + this.i)
}

mc1.samcall()

mc2.i = 6765;
mc1.samcall.call(mc2)  //这里改变了this的引用到mc2中,所以引用this.i时 变为 mc2的 6765
====================
输出是这样的
当前对象域是:mc1 ,i的值是123
当前对象域是:mc2 ,i的值是6765

而下面菩提树下的杨过,说的很详细,我记录在下面。

以下摘录自:作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com

------------------------------------------------

Function类的重要方法call()与apply()

我们知道,每个function最终在执行时,都要有一个上下文环境,也就是this指针在函数执行时,到底指向谁的问题?

 var jimmy:Object = new Object();
 //定义jimmy对象的一个方法

jimmy.addSalary = function(addSalary:uint):void{

trace("姓名:",this.name,",原工资:",this.salary,",新工资:",this.salary + addSalary);

};

这里我们动态的给jimmy对象定义了一个addSalary方法,注意addSalary方法体中的this,如果我们用


jimmy.name = "jimmy.yang";
 jimmy.salary = 3000;

jimmy.addSalary(500);//姓名: jimmy.yang ,原工资: 3000 ,新工资: 3500

这样调用时,this指针默认就是指向jimmy的,所以this.name自然就是jimmy.yang,而this.salary自然也就是3000,这不废话么?

但是我们可以借助Function类的apply以及call方法,显式改变this指针的指向!注意上面代码中的这一部分:

 var mike:Object = new Object();
 mike.name = "Mike";
 mike.salary = 5000;
 jimmy.addSalary.call(jimmy,1000);//姓名: jimmy.yang ,原工资: 3000 ,新工资: 4000
 jimmy.addSalary.call(mike,1000);//姓名: Mike ,原工资: 5000 ,新工资: 6000

这里我们又搞出了一个mike对象,而且并没有给他定义addSalary方法,但如果系统也要给mike同志临时加工资怎么办? 可以把jimmy对象的addSalary方法应用在mike身上,即jimmy.addSalary.call(mike,1000),最终mike得偿所愿,在原工资5000的基础上加了1000,就成了工资6000 (如果现实中加工资也这么容易就好了)

至于apply方法,作用跟call一样,也可以用来改变函数执行时,this指针的指向,区别在于apply方法要求第二个参数必须是数组形式,即:

jimmy.addSalary.apply(mike,[1100]);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值