apply()和call()的作用和区别

apply()和call()两个方法的基本作用都是: 改变执行上下文(执行环境)
什么是执行上下文?
其实我对这个执行上下文的具体含义也不是很能理解,在查过百度中,得到一个比较通俗能理解但是比较浅显的说法就是:
在函数被调用时,this的指向就是执行上下文。
而this指向的永远是调用该方法的对象
即函数被调用的时候,调用该方法的对象就是执行上下文


apply()和call()的运用
apply()和call()似乎运用的场景有很多
但是最近在学习中用到一个场景是借 用已封装好的的方法
就好比如
当对象A已经有一个自己特殊的方法,
对象B没有对象A的那个方法,但是对象B需要使用到对象A的那个方法,
就可以通过apply()或者call()方法去借用对象A的方法
而且借用对象A的方法会比重新为对象B去扩展一个已经存在可用的方法来得快,并且方便

基本用法
/*apply()方法     obj借用了function*/
function.apply(obj [, argArray])

function sub(a+b){
console.log( a+b)   // 10
}

var obj = {
name:"obj"
}

sub.apply(obj,[4,6]);  10



/*call()方法             obj借用了function*/
function.call(obj[,arg1[,arg2[,argN]]]])

function show(name){
console.log(name)
}

var myObj = {
name:"hello"
}

show.call(myObj,'obj');    obj
共同点:
调用apply()和call()的function必须是函数
obj都是改变后的执行上下文,即需要借用function的对象

不同点:
apply()方法:
argArray是传入给function使用的参数,是一个数组,即使只有一个参数也需要以数组的形式出现

call()方法:
可以接受多个arg1、arg2、....argN个参数,obj后的参数是一个参数列表

所以,由此可知apply和call的主要作用都是一样的,只是传入的参数不同
apply()方法传入function的 参数必须是数组的形式
call()方法传入function的参数是一个参数列表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值