Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)
如:
1 var a={length:2,0:'first',1:'second'};
2 Array.prototype.slice.call(a);//  ["first", "second"]
3
4 var a={length:2};
5 Array.prototype.slice.call(a);//  [undefined, undefined]

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

Array.prototype.slice.call(arguments)能够将arguments转成数组,那么就是arguments.toArray().slice();到这里,是不是就可以说Array.prototype.slice.call(arguments)的过程就是先将传入进来的第一个参数转为数组,再调用slice?
 
再看call的用法,如下例子
1 var a = function(){
2      console.log(this);    // 'littledu'
3      console.log(typeof this);      //  Object
4      console.log(this instanceof String);    // true
5 }
6 a.call('littledu');

可以看出,call了后,就把当前函数推入所传参数的作用域中去了,不知道这样说对不对,但反正this就指向了所传进去的对象就肯定的了。
到这里,基本就差不多了,我们可以大胆猜一下slice的内部实现,如下
1 Array.prototype.slice = function(start,end){
2      var result = new Array();
3      start = start || 0;
4      end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
5      for(var i = start; i < end; i++){
6           result.push(this[i]);
7      }
8      return result;
9 }

大概就是这样吧,理解就行,不深究。

Array.prototype.slice.call(arguments)相关推荐

  1. [转载]Array.prototype.slice.call(arguments,1)原理

    Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...

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

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

  3. Array.prototype.slice.apply(arguments)和[].slice.apply(arguments)解析

    我们知道,函数内部 arguments 是一个类数组对象,不是真正的数组,因此也无法使用数组的各种方法.想详细了解 argument 对象可以前往函数中的 arguments. (function f ...

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

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

  5. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  6. Array.prototype.slice.call(arguments,0); 上下调用模型

    var fn9 = (function () {var arr = {}; //缓存对象var counter = function (arr) { //计算函数//args也就是fn9(1, 2, ...

  7. Array.prototype.slice.call(arguments)对象转成数组

    转成数组的通用函数 1 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ ...

  8. Array.prototype.slice.call

    Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没有slice这个方法. ...

  9. slice,Array.prototype.slice,Array.protyotype.slice.call

    slice 特点:基于当前数组中的一或多个项创建一个新数组.[原数组不会被修改] 返回结果:返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象. 语法: arr.slice() ...

最新文章

  1. 基因组行业重大事件介绍
  2. Java基础巩固之线程学习
  3. 成功解决read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and wil
  4. centos7.0利用yum快速安装mysql8.0
  5. python数据可视化工具 pandas_Pandas数据可视化工具——Seaborn用法整理(下)
  6. js字符串、数组和数字常用方法总结
  7. linux windows变色龙,体验开源变色龙SUSE Linux Enterprise Server 11
  8. 摩托车午夜飙车撞进公交车下 肇事车主当场死亡
  9. python编程设计_程序设计入门—Python
  10. ie6,ie7兼容性总结(转)
  11. bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
  12. nokia n9 android 4.4,NOKIA N9获APK兼容层 可安装Android应用
  13. MYSQL误删数据恢复
  14. minecraft java文件夹_Minecraft游戏下载 文件结构说明
  15. 什么是软件架构?常用的软件架构
  16. 数据库数据误删除恢复
  17. 机械硬盘与固态硬盘的区别
  18. 腾讯云、阿里云都“服”了,云容灾你还迟疑什么?
  19. java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录
  20. 中考可以使用计算机吗,中考物理课可以带计算机吗

热门文章

  1. zookeeper集群部署(分布式)
  2. 单节点配置SecondaryNameNode
  3. FAILED: Error in metadata: MetaException(message:Got exception: java.net.ConnectException
  4. 【Transformer】ATS: Adaptive Token Sampling For Efficient Vision Transformers
  5. 深度学习与计算机视觉(四)反向传播及其直观理解
  6. 如何在代码中将menu隐藏_如何在40行代码中将机器学习用于光学/光子学应用
  7. 在 Rolling Update 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(146)
  8. 《北京作家》2010年第2期,总第4期出版
  9. 流水线技术在高速数字电路设计中的应用
  10. python frame如何置顶_Python tkinter frame父窗口小部件排列列