zoukankan      html  css  js  c++  java
  • Array.prototype.slice.call()方法详解

    Array.prototype.slice.call()方法详解

    1、基本讲解

    slice是截取的意思

    arrayObj.slice(start, [end]) // 截取数组的一部分
    call([thisObj[,arg1[arg2[[argN]]]]]) // 第一个参数thisObj是改变this的指向 arrg1~argN是参数

    那么Array.prototype.slice.call(arguments,1);这句话的意思就是说把调用方法的参数截取出来

    如:

    function test(a,b,c,d) 
    { 
        var arg = Array.prototype.slice.call(arguments,1); 
        alert(arg); 
    } 
    test("a","b","c","d"); // b,c,d

    2、疑惑解答

    因为arguments并不是真正的数组对象,只是与数组类似而已,所以它并没有slice这个方法,而Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法。要是直接写arguments.slice(1)会报错。

    3、真正原理

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

    如:

    var a={length:2,0:'first',1:'second'};//类数组,有length属性,长度为2,第0个是first,第1个是second
    console.log(Array.prototype.slice.call(a,0));// ["first", "second"],调用数组的slice(0);
    
    var a={length:2,0:'first',1:'second'};
    console.log(Array.prototype.slice.call(a,1));//["second"],调用数组的slice(1);
    
    var a={0:'first',1:'second'};//去掉length属性,返回一个空数组
    console.log(Array.prototype.slice.call(a,0));//[]
    
    function test(){
      console.log(Array.prototype.slice.call(arguments,0));//["a", "b", "c"],slice(0)
      console.log(Array.prototype.slice.call(arguments,1));//["b", "c"],slice(1)
    }
    test("a","b","c");
  • 相关阅读:
    阅读Unity官方技术blog笔记
    设计模式-具有Model-View-ViewModel设计模式的WPF应用
    关于PureMVC的一点想法
    管窥WOWUIInterface代码
    Lua 5.4引入的新变动
    Unity手册SpriteAtlasManager翻译
    2D向量的数学计算
    提前编译(AOT编译)Wiki翻译
    Lua5.3手册标准库拾遗
    C#异步语法糖的苦与甜
  • 原文地址:https://www.cnblogs.com/yangai/p/11081820.html
Copyright © 2011-2022 走看看