apply和call方法

Posted EthanCheung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apply和call方法相关的知识,希望对你有一定的参考价值。

 真伪数组转换

/*
apply和call方法的作用:
专门用于修改方法内部的this

格式:
call(对象, 参数1, 参数2, ...);
apply(对象, [数组]);
*/
function test() {
    console.log(this);
}
// window.test();
var obj = {"name": "lnj2"};
/*
1.通过window.test找到test方法
2.通过apply(obj)将找到的test方法内部的this修改为自定义的对象
*/
// window.test.apply(obj);
// window.test.call(obj);

function sum(a, b) {
    console.log(this);
    console.log(a + b);
}
// window.sum.call(obj, 1, 2);
/*
1.通过window.sum找到sum方法
2.通过apply(obj)将找到的sum方法内部的this修改为自定义的对象
3.将传入数组中的元素依次取出, 传递给形参
*/
// window.sum.apply(obj, [3, 5]);

// var arr = [];
// arr.push(1);
// console.log(arr);

// 真数组转换伪数组的一个过程
// var arr = [1, 3, 5, 7, 9];
// var obj = {};
/*
1.通过[].push找到数组中的push方法
2.通过apply(obj)将找到的push方法内部的this修改为自定义的对象
3.将传入数组中的元素依次取出, 传递给形参
*/
// [].push.apply(obj, arr);
// console.log(obj);
window.onload = function (ev) {
    // 系统自带的伪数组,低级浏览器下没问题
    var res = document.querySelectorAll("div");
    // 自定义的伪数组,低级浏览器下有问题
    var obj = {0:"lnj", 1:"33", length: 2};
    // var arr = []; // 真数组
    // [].push.apply(arr, obj);
    // console.log(arr);

    // 如果想将伪数组转换为真数组那么可以使用如下方法
    var arr = [].slice.call(obj);
    console.log(arr);
    // var arr2 = [1, 3, 5, 7, 9];
    // 如果slice方法什么参数都没有传递, 会将数组中的元素放到一个新的数组中原样返回
    // var res2 = arr2.slice();
    // var res2 = arr2.slice(2);
    // var res2 = arr2.slice(2, 4);
    // console.log(res2);
}

 

以上是关于apply和call方法的主要内容,如果未能解决你的问题,请参考以下文章

call()和apply()方法

call 和 apply方法解析

apply和call的用法

关于call和apply的使用和区别

关于JS中apply和call详细解答

JavaScript中 call和apply