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方法的主要内容,如果未能解决你的问题,请参考以下文章