小课堂[萌新分院]

如何理解js中的call和apply?

分享人:张晓琳

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

call 和 apply 都是为了改变某个函数运行时的
context 即上下文而存在的,换句话说,
就是为了改变函数体内部 this 的指向。
因为 JavaScript 的函数存在
「定义时上下文」和「运行时上下文」
以及「上下文是可以改变的」这样的概念。

2.知识剖析

1. apply:
方法能劫持另外一个对象的方法,继承另外一个对象的属性.
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
2. call
和apply的意思一样,只不过是参数列表不一样
Function.call(obj,[param1[,param2[,…[,paramN] ] ] ] )
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表

3.常见问题

如何使用call和apply?

4.解决方案

call 和 apply 的作用基本类似,
都是去执行function并将这个function
的context替换成第一个参数带入。
两者的不同是call 必须将function 的参数一一带入,接受的是连续参数
而 apply 接受的是数组参数 只要在第二个参数带入一个数列。
demo

5.编码实战

demo

6.扩展思考

call()和apply()两种方法的区别?
相同点:两个方法产生的作用是完全一样的
不同点:方法传递的参数不同
call()接受的是一个参数列表,而apply()接受一个参数数组。
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2])
其中 this 是你想指定的上下文,他可以是任何一个 JavaScript 对象(JavaScript 中一切皆对象),
call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。
因此要说适用条件的话,当你的参数是明确知道数量时用 call 。
而不确定的时候用 apply,然后把参数 push 进数组传递进去。

7.参考文献

參考

8.更多讨论

鸣谢

感谢大家观看

By 張曉琳