標籤:
call和apply大概的用法差不多,簡單的看下例子:
<input type="text" id="myText" value="input text"><script> function Obj(){this.value="對象!";} var value="global 變數"; function Fun1(){alert(this.value);} window.Fun1(); //global 變數 Fun1.call(window); //global 變數 Fun1.call(document.getElementById('myText')); //input text Fun1.call(new Obj()); //對象!</script>
我們可以將call()和apply()看做是某個對象的方法,通過調用方法的形式來間接調用函數。
即方法是原來的方法,但是參數就是call中所包含對象的參數。
call函數和apply方法的第一個參數都是要傳入給當前對象的對象,及函數內部的this。後面的參數都是傳遞給當前對象的參數。
<script> var func=new function(){this.a="func"} var myfunc=function(x){ var a="myfunc"; alert(this.a); alert(x); } myfunc.call(func,"var");</script>
可見分別彈出了func和var。到這裡就對call的每個參數的意義有所瞭解了。
對於apply和call兩者在作用上是相同的,但兩者在參數上有區別的。
對於第一個參數意義都一樣,但對第二個參數:
apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入,而call則作為call的參數傳入(從第二個參數開始)。
如 func.call(func1,var1,var2,var3)對應的apply寫法為:func.apply(func1,[var1,var2,var3])
同時使用apply的好處是可以直接將當前函數的arguments對象作為apply的第二個參數傳入
JavaScript中apply與call的用法意義及區別