javascript中的Array.prototype.slice.call(arguments)方法

Array.prototype. slice.call(arguments)能够将具有length属性的对象转化为数组,

var a={length:2,0:'first',1:'second'};
 Array.prototype.slice.call(a);//  ["first", "second"]

先看call的用法:

var a = function(){
console.log(this);    // 'littledu'
console.log(typeof this);      //  Object
console.log(this instanceof String);    // true
}
a.call('littledu');

call的用法就是把a对象的作用域作用到传入的参数中去(也可以说传入参数在a对象的环境中执行)。
再来看slice方法的原理:

Array.prototype.slice = function(start,end){
var result = new Array();
start = start || 0;
end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
for(var i = start; i < end; i++){
   result.push(this[i]);
      return result;
   }

最后介绍下转成数组的通用方法:

var toArray = function(s){
  try{
    return Array.prototype.slice.call(s);
      } catch(e){
     var arr = [];
     for(var i = 0,len = s.length; i < len; i++){
     //arr.push(s[i]);
       arr[i] = s[i];  //据说这样比push快
      }
    return arr;
     }
     }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,281评论 0 4
  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 4,292评论 0 6
  • 这个在黄土高坡种苹果的父亲 却把女儿,嫁给了江南水乡 苹果开花的时候 他说早起的女儿正在梳妆打扮 雷阵雨下起来的时...
    甘肃子溪阅读 84评论 0 1
  • 秦始皇灭六国、统一中原大地、立秦朝、称皇帝,可谓建立了一番丰功伟绩。自己既然已贵为天子,自然是所有的欲望都能得到满...
    叫我徐公子阅读 711评论 0 1
  • 攀珠峰、斗鲨鱼、登大刊封面……一个人只用了18天,就从失意中年男逆袭成人生大赢家,你会怎么看?或许,电影《白日梦想...
    林一朵朵阅读 417评论 2 1