我对于js中apply()和call()和push()的理解
程序员文章站
2022-06-10 09:31:00
...
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>
只是个人理解,有不对的话欢迎及时指出,因为我也是小白,刚学。
上一篇: HTML5 Web 存储
下一篇: 【HTML5】WebSocket和SSE