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

如果我们要将它转换为数组可以调用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 保存这些遍历出来的节点元素

【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解的更多相关文章

  1. js Array.prototype.slice.call(arguments,0) 理解

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  2. js基础进阶--关于Array.prototype.slice.call(arguments) 的思考

    欢迎访问我的个人博客:http://www.xiaolongwu.cn Array.prototype.slice.call(arguments)的作用为:强制转化arguments为数组格式,一般出 ...

  3. 详解 Array.prototype.slice.call(arguments)

    首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...

  4. Array.prototype.slice.call(arguments) 类数组转成真正的数组

    Array.prototype.slice.call(arguments)   我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数 ...

  5. 转对象(含length属性)成数组Array.prototype.slice.call(arguments)

    我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js ...

  6. 理解Array.prototype.slice.call(arguments)

    在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1.基本讲解 1.在 ...

  7. javascript:Array.prototype.slice.call(arguments)

    我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js ...

  8. 解析 Array.prototype.slice.call(arguments,0)

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  9. Array.prototype.slice.call(arguments)

    Array.prototype.slice.call(arguments)能够将具有length属性的对象转化为数组, 可以理解为将arguments转化成一个数组对象,让它具有slice方法 如: ...

随机推荐

  1. .net/c#常用框架/中间件简介(不定时更新)

    任务调度 Quartz.NET:Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允 许开发人员根据时间间隔 ...

  2. 【JBPM4】判断节点decision 方法3 handler

    JPDL <?xml version="1.0" encoding="UTF-8"?> <process key="decision ...

  3. MSSQL为单独数据库创建登录账户

    如果要为一个数据库创建一个独立的账号需要这个数据库为包含数据库 当前(非包含)的数据库所面临的问题在描述什么是包含数据库之前,先了解一下为什么会出现包含数据库.当前的数据库有一些问题,如下:1.在数据 ...

  4. vue分页tbale小荔枝

    首先,动态加载数据 <table class="table table-bordered table-condensed no_margin_bottom jyjg_tab" ...

  5. bzoj 1407 扩展欧几里德

    思路:枚举洞穴个数,用扩展欧几里德暴力判断没两个人的周期. #include<bits/stdc++.h> #define LL long long #define fi first #d ...

  6. Python安装scrapy提示 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++

    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools&quo ...

  7. Linux命令之ftp

    ftp [-pinegvd] [host] pftp [-inegvd] [host] 用户通过ftp这个程序来使用Internet上的标准文件传输协议(FTP).本程序允许用户向远端网站发送文件,或 ...

  8. bash 中的变量可以这么用

    举个例子: t.sh ====================== #!/bin/bash ./a.sh ./b.sh ======================= a.sh =========== ...

  9. 使用html+css实现三角标示符号

    我们平常打开某个网站的时候,常常会发现网页上很多导航或者指示条会使用一个三角符号去指向内容,效果简洁美观,甚至很多前端面试中也会提及如何在网页上实现一个三角符号,这里给出一个很简单使用的实现方式. 首 ...

  10. 计蒜客NOIP2018模拟1

    https://www.jisuanke.com/contest/1152 T1:最失败的一道题,其实就是道水题,好几种写法,一种都没想出来. 题意转化后就是:每个数可以选a[i]和a[i]-k,最后 ...