JS当中的call与apply的应用

        在很多高手的代码当中经常会看到foo.call(this, arg1, arg2....)或foo.apply(this,arguments),之前一直都很难理解为什么经常要用到这个呢?用这个有什么样的好处。

        其实call和apply的作用都一样,都是通过参数arg及函数foo来代入指定的位置this上。

写成等式就如下:

        foo.call(this, arg1, arg2, arg3......) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3......)

foo是一个方法函数,this是上下文的相关对象,arg1...是相关的实参;这里的意思代表实例化后的this。


call的例子:

var b = new B();
//给对象a动态指派b的setMessage方法,注意,a本身是没有这方法的!
b.setMessage.call(a, "a的消息");
//下面将显示"a的消息"
alert(a.getMessage());
//给对象b动态指派a的getMessage方法,注意,b本身也是没有这方法的!

上述代码指出,call可以达到无中生有的地部,只要指派this就能够拥有对应的方法同时能代入参数,即对this指派方法的实例化。

call和apply的作用就是借用人家的方法来调用,就像调用自己的函数一样。


apply的例子:

//例
print.call(window, “背” , “光” , “脚”, “本”);
//foo参数可能为多个
function foo(){
print.apply(window, arguments);
}
从上述代码中可以看出,apply更适合把函数重新封装成一个新的函数,且可以适应不同的参数数量。参数arguments,指数量不定的实参参数。即foo的实例可以为foo(arg1,arg2,arg3......)

从上面的代码可知,call与apply的作用是一样只是使用的场合并不一样而已,apply通过arguments来封装新的函数,而call是更直接的借用函数并实例化。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值