1. 程式人生 > >如何理解和熟練運用js中的call及apply?

如何理解和熟練運用js中的call及apply?

tex app 前端開發 對象 方便 有一個 ons arguments 定義

在前端開發過程中,我們經常需要改變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?