javascript ——call和apply 方法
apply 和 call方法的作用:专门用于修改方法内部的this
例
function test() {
console.log(this);
}
var obj = {"name" : "hjy"};
window.test.call(obj);
1.通过window.test 找到test方法
2.通过 apply(obj) 将找到的 test方法内部的 this 修改为自定义的对象
3.最后 打印出 {“name”:“hjy”}
格式:
apply(对象, [数组])
call(对象, 参数1, 参数2, 参数3, ...)
例:
function sum(a, b) {
console.log(this);
console.log(a + b);
}
var obj = {"name" : "hjy"};
window.sum.apply(obj, [2, 3]); //打印 {name: "hjy"} 5
window.sum.call(obj, 2, 3); //打印 {name: "hjy"} 5
1.通过window.sum 找到 sum 方法
2.通过 apply(obj) 将找到的 test方法内部的 this 修改为自定义的对象
3.将传入数组中的元素 或 每个传入的参数 依次取出, 传递给形参
应用:将数组转换为伪数组
var arr = [1,2,3,4,5];
var obj = {};
[].push.apply(obj, arr);
1.通过[].push 找到 数组的push 方法
2.通过 apply(obj) 将找到的 push 方法内部的 this 修改为自定义的对象
3.将传入数组中的元素 依次取出, 传递给形参
简单的说,就是将 arr 里的每个元素 push 到了 obj 身上,打印 obj 如下:
将伪数组转换为数组
结构: <div></div> <div></div> <div></div>
(1)系统自带伪数组
var res = document.getElementsTagName('div');
(2) 自定义伪数组
var obj = {0 : 'hjy', 1 : 'zjj', length : 2};
var arr = [];
[].push.apply(arr, res); // arr 为 [div, div, div]
[].push.apply(arr, obj); // arr 为 ['hjy', 'zjj']
这个方法对IE8及以下的浏览器不支持
解决方法:(优先使用这个兼容的方法)
var arr = [].slice.call(obj); // arr 为 ['hjy', 'zjj']
slice 方法如果不传递任何参数, 会将数组中的每个元素放到一个新的数组中返回