1. 程式人生 > >我對於js中apply()和call()和push()的理解

我對於js中apply()和call()和push()的理解

apply()和call()專門用於修改this。

先舉一個小例子:

<script>

function test(){
   console.log(this);
}
window.test();  //列印的結果為Window,說明此時的this指的是window

</script>

接下來我們用apply()和call()方法:

<script>

function test(){
    console.log(this);
}

var obj = {"name":"xxx"};
window.test.apply(obj);  //列印後的結果為{"name":"xxx"}
window.test.call(obj);  //同上,列印後的結果也為{"name":"xxx"}

</script>

那麼現在來說一下兩者的區別:

call(物件,引數一,引數二,引數三...);

apply(物件,[陣列]);

對於call()的使用:

<script>

var obj = {"name" : "xxx"};

function sum(a,b){
   console.log(this);     //打印出來{"name" : "xxx"}
   console.log(a + b);   //打印出來3

}
window.sum.call(obj,1,2);  

</script>

對於apply()的使用:

<script>

var obj = {"name" : "xxx"};

function sum(a,b){
   console.log(this);     //打印出來{"name" : "xxx"}
   console.log(a + b);   //打印出來3

}
window.sum.apply(obj,[1,2]);  

</script>

擴充套件,對於把真陣列變成偽陣列,利用三個方法的結合:

<script>

var arr = [1,3,5,7,9];
var obj = {};

//1.通過[].push找到陣列中的push方法
//2.通過apply(obj)將找到的push方法內部的this修改為自定義的物件obj
//3.將傳入陣列中的元素依次取出,傳遞到obj中

[].push.apply(obj,arr); 
console.log(obj);  //列印的結果為{0:1, 1:3, 2:5, 3:7, 4:9, length:5}

</script>

只是個人理解,有不對的話歡迎及時指出,因為我也是小白,剛學。