call和apply应用详解

27 篇文章 0 订阅
25 篇文章 0 订阅

ECAMScript3给Function的原型定义了两个方法,分别是Function.prototype.call和Function.prototype.apply,他们的作用一模一样,区别仅在于传参方式不同。

共性:

  • 产生的效果或作用完全相同;
  •  至少有一个参数;
  •  第一个参数必须有且是一个对象(Object)。

call和apply区别:

传递参数的方式。用法上不同,主要是参数不同

1、call方法:

call参数数量不固定

与apply相同,第一个参数是指定函数体内this对象的指向,后面的是需要传入被调用函数的参数call实际上是包装在apply上的语法糖。如果我们需要明确的知道函数接收多少个参数,而且想一目了然的表达形参和实参的对应关系,可以用call。

语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。

var func = function(a, b, c) {
  alert([a,b,c]) // 输出[1,2,3] 
}
func.call(null,1,2,3)

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

2、apply方法:

apply接收两个参数

第一个参数指定函数体内this对象的指向,第二个参数是数组或者类数组(例如arguments),是传入被调用函数的参数列表。

语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
参数
thisObj
可选项。将被用作当前对象的对象。
argArray
可选项。将被传递给该函数的参数数组。

var func = function(a, b, c) {

alert([a,b,c]) // 输出[1,2,3]

}

func.apply(null,[1,2,3])

说明
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

总结:

1 call的语法:函数名.call(obj,参数1,参数2,参数3……);

2 apply的语法:函数名.apply(obj,[参数1,参数2,参数3……]);

这两个东西功能相同,就是把一个函数里面的this设置为某个对象,区别就是后面的参数的语法。call需要使用逗号分隔列出所有参数,但是apply是把所有参数写在数组里面。需要注意的是即使只有一个参数,也必须写在数组里面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值