美文网首页IT修真院-前端
如何理解js中的call及apply?

如何理解js中的call及apply?

作者: 古碑先生 | 来源:发表于2017-10-16 10:33 被阅读0次

大家好,我是IT修真院北京分院第22期学员,一枚正直善良的web程序员。

1.背景介绍

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

2.知识剖析

2.1 apply:

方法能劫持另外一个对象的方法,继承另外一个对象的属性.

Function.apply(obj,args)方法能接收两个参数

obj:这个对象将代替Function类里this对象

args:这个是数组,它将作为参数传给Function(args-->arguments)

2.2 call

和apply的意思一样,只不过是参数列表不一样

Function.call(obj,[param1[,param2[,…[,paramN]]]])

obj:这个对象将代替Function类里this对象

params:这个是一个参数列表

3.常见问题

如何使用call和apply?

4.解决方案

demo1:

Person.apply(this,arguments);

this:在创建对象在这个时候代表的是student;

arguments:是一个数组,也就是[“zhangsan”,”21”,”一年级”];

也就是通俗一点讲就是:用student去执行Person这个类里面的内容,在Person这个类里面存在this.name等之类的语句,这样就将属性创建到了student对象里面


call 的意思是把 animal 的方法放到cat上执行,原来cat是没有showName() 方法,现在是把animal 的showName()方法放到 cat上来执行,所以this.name 应该是 Cat

5.编码实战

6.扩展思考

call()和apply()两种方法的区别?

相同点:两个方法产生的作用是完全一样的

不同点:方法传递的参数不同

call()接受的是一个参数列表,而apply()接受一个参数数组。

func.call(this, arg1, arg2);

func.apply(this, [arg1, arg2])

其中 this 是你想指定的上下文,他可以是任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。因此要说适用条件的话,当你的参数是明确知道数量时用 call 。 而不确定的时候用 apply,然后把参数 push 进数组传递进去。

7.参考文献

参考一:js中bind、call、apply函数的用法

参考二:Js apply 方法 详解

8.更多讨论

课堂反馈:

1.问雪飞:什么情况下用apply,什么情况下用call?

雪飞:知道具体参数时用call,不知道的时候用数组apply。

2.还有哪些和call,apply类似的方法?靖哲提问

答:可以看看阮一峰的this指向

3.this指向的到底是什么?婷婷师妹问

答,this指向的是一个对象,这个对象有原型,属性,而并非函数,

视频链接:https://pan.baidu.com/s/1geULOUR 密码: 156g

ppt链接:https://ptteng.github.io/PPT/PPT/JS-05-Understand%20call%20and%20apply%20in%20JS.html

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

------------------------------------------------------------------------------------------------------------------------

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧 !

猛戳这里

相关文章

网友评论

    本文标题:如何理解js中的call及apply?

    本文链接:https://www.haomeiwen.com/subject/lnckuxtx.html