call和apply的用法

call和 apply 可以看做是某个对象的方法,通过调用方法的形式来间接的调用函数.

call apply的第一个参数是要调用函数的母对象,它是调用的上下文,在函数体内通过this对它的引用。

For example:

要想以对象obj的方法来调用函数f

则为:f.call(obj) || f.apply(obj);

这段代码等价于:

obj.method=f  //f存储为obj的临时方法

obj.method()  //调用它,不传入参数

Ecmascript5严格模式中call()apply()的第一个参数都会变成this的值,哪怕传入的实参的类型是null || undefined 都会被全局对象代替,其它的原始值则会被相应的包装对象所替代.

a:对于call来说 第一个调用上下文实参之后的所有实参就是要传入待调用函数的值。

For example:

以对象obj的方法的形式调用函数f(),并传入两个参数:

f.call(obj,1,2);

b:apply()方法与call()方法类似,但传入的参数的形式有点不同,apply的参数都是放在一个数组中.

`For example:

F.call(obj,[1,2]);

如果一个参数的数量可以使任意数量个,则给apply()传入的参数数组可以是任意长度的.

**注意:apply()的参数数组可以使对象数组,也可以是真实数组**,可以将当前函数的arguments数组直接传入另一个函数的apply()来调用另一个函数.

  For example:

//把对象obj中的名为f的方法替换成另一个方法

//可以在调用原始的方法之前和之后记录日志消息 

function trace(obj,f){

  var original=obj[f];//在闭包中保存原始的方法

  obj[f]=function(){

  console.log(new date(),Entering,f);//输出日志消息

  var result=original.apply(this,arguments);//偷梁换柱调用原始函数

  console.log(new date(),Exting,f);//输出日志消息

  return result; 

  };

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值