JavaScript中apply與call的用法意義及區別
阿新 • • 發佈:2019-01-11
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的第二個引數傳入