我對於js中apply()和call()和push()的理解
阿新 • • 發佈:2018-12-19
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>
只是個人理解,有不對的話歡迎及時指出,因為我也是小白,剛學。