• 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解


     我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组

     如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法

     分析一下这个方法:

     Array.prototype:Array其实一个类名,但是调用类里面的方法只能够通过类的实例对象调用所以这里用了  Array.prototype 通过它自身的原型对象调用

    其次是slice():这个是Array类里面的一个方法功能是截取数组里面的某一部分内容,它接收两个参数slice('数组下标起始位置','数组下标结束位置')

    call()方法:把某一方法放到另外一个执行环境里面执行,此方法也是有两个参数call('执行环境','为调用的方法传参(可忽略)')

    好了再看看实例:

    function convertToArray(nodes){
              var arr = null;
              //兼容ie
              try{
                 arr = Array.prototype.slice.call(nodes,0);
                 //因为 slice是 array类的方法
                 //而传进来的参数是一个 DOM对象的数组
                 //所以通过call 方法把 array类的方法放到这个对象里面执行
                 //call 的第二个参数是表示向被调用的方法传进参数
                 //这里的0 表示从index为0的地方开始
              }catch(ex){
                  arr = new Array();
                  
                  for (var i = 0; i < nodes.length; i++) {
                        arr.push(nodes[i]);
                  }
                  
              }
              return arr;
          }

    这是高程里面的一个例子:通过一个函数传进一个childNodes的实例对象,然后将这个子元素模型的对象转换成数组

    childNodes属性都包含一个NodeList对象,NodeList是一种类数组对象保存一组有序节点,可以通过位置访问这些节点元素

    为了兼容ie<9 子类是以COM对象来的我们不能像使用JScript对象那样使用这种对象,所以在catch里面我们通过for遍历childNodes 属性里面的 NodeList对象 并实例化一个array 保存这些遍历出来的节点元素

  • 相关阅读:
    字符串匹配——KMP算法(C++)
    数论——Fibonacci数列(C++)
    数据结构——线段树之二(C++)
    数据结构——线段树之一(C++)
    最后的最后
    开始的开始
    10.25模拟 保留道路
    10.25模拟 列车调度
    10.25模拟 三角形
    洛谷 P1093 奖学金
  • 原文地址:https://www.cnblogs.com/stitchgogo/p/6339952.html
Copyright © 2020-2023  润新知