如何理解和熟练运用js中的call及apply?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解和熟练运用js中的call及apply?相关的知识,希望对你有一定的参考价值。

在前端开发过程中,我们经常需要改变this指向,通常我们想到的就是用call方法,但是对于call的理解很多人不是很清晰,那么下面小提莫就给大家详细说一说call和apply的详细知识。

call的第一个参数传对象,参数可以是任何类型(包括null)。例:call(obj,arg1,arg2,arg3)

apply第一个参数传对象,参数可以是数组或者arguments对象。例:apply(obj,[arg1,arg2,arg3])

call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

例如,我们经常会这样定义:

1 function Teemo(){
2 this.gift="mushroom";
3 this.say=function(){
4     console.log("I love "+this.gift);
5   }
6 }
7 var smallTeemo = new Teemo;
8 smallTeemo.say();

但是如果我们有一个对象Heimerdinger= {gift:"battery"},我们不想对它重新定义say方法,那么我们可以通过call或apply用smallTeemo的say方法:smallTeemo.say.call(Heimerdinger);

为了方便记忆:

提莫种蘑菇,大头摆炮台,安妮召唤熊。

有天大头想种蘑菇了

提莫.种蘑菇.call(大头,蘑菇)

大头就能种蘑菇了

提莫调皮了,也想召唤熊

安妮.召唤熊.call(提莫,熊)

就这样记住了。

 

 

以上是关于如何理解和熟练运用js中的call及apply?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解和熟练运用js中的call及apply?

理解和熟练运用js中的call及apply

理解和运用javascript中的call及apply

JS中的call,apply和bind及记忆方式

理解js中的call()和apply()

call 和 apply方法解析