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 方法如果不传递任何参数, 会将数组中的每个元素放到一个新的数组中返回 

        

posted @ 2020-02-19 21:12  shumeihh  阅读(136)  评论(0编辑  收藏  举报