1. 程式人生 > >JavaScript中apply與call的用法意義及區別

JavaScript中apply與call的用法意義及區別

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的第二個引數傳入