call与apply函数

时间:2021-12-24 17:21:14

call与apply函数

1、为什么需要call与apply函数

Javascript中,每一个函数内部都有一个特殊的关键词this,其随着所处环境的不同其指向也是不同的。

函数的内部其this也是指向window对象

行内绑定:其函数内部的this指向window对象

动态绑定:其函数内部的this指向当前正在操作的dom对象

 

问题:我们可不可以人为的更改函数内部的this指向呢?

答:可以,使用call或apply方法。

2、call或apply函数的定义

① call([thisObj[,arg1[,arg2[,argN]]]])

参数说明:

thisObj :要指向的对象

arg1,arg2…argN :参数列表

 

② apply([thisObj[,argArray]])

参数说明:

thisObj :要指向的对象

argArray :参数数组,要求是一个数组

 

问题:call方法与apply方法有何区别?

答:call方法与apply方法功能是完全一致的,都是为了改变函数内部的this指向,唯一的不同就是语法的不同。

 

例1:为每个对象绑定一个speak说话方法

call与apply函数

运行结果:报错,当前对象不支持此属性或方法。原因:① 我们并没有为p1对象定义一个speak方法 ② speak函数内部的this指向window对象

 

例2:使用call或apply改进上题

call与apply函数

3、call与apply方法执行流程

① 改变了speak函数内部的this指向

② 执行speak函数

4、参数使用

call与apply函数