浅谈Array.prototype.slice.call(arguments,0)

在谈论这个问题之前 我们先了解下call的用法及作用

对象.方法.call(obj[,arg1[, arg2[,   [,.argN]]]]]):调用一个对象的一个方法,以另一个对象替换当前对象。

 1 function Personal(a){
 2
 3   this.name = a;
 4
 5   this.say = function(){
 6
 7     alert(a)
 8   }
 9
10 }
11
12 function Man(a){
13
14     this.sex = "maie";
15     Personal.call(this,a)
16
17 }
18 var oa = new Man("oa");
19 oa.say();

此处将Person的属性继承到了Man上 Man中的Person.call(this)中将Person中的this指向重新定向到
了Man上;

接着我么就来看下 数组的slice方法;

定义和用法

slice() 方法可从已有的数组中返回选定的元素。

语法

arrayObject.slice(start,end)
参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

返回值

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

个人理解

此处的Array.prototype.slice.call(arguments);是将arguments转化成相应的数组;

如何转化的关键应该就在于slice这个方法中;

我们可以这么理解 slice方法;

 1 Array.prototype.slice = function(start,end){
 2       var self = this,len = self.length;
 3       start = start?start<0?start+len:start:0;
 4       end = end ? end<0?end+len:end : len ;
 5       var arr = [];
 6       // console.log(start,end)
 7       for(var i=start;i<end;i++){
 8          arr.push(self[i]);
 9       }
10       return arr;
11 }

这个当中this指向的是Array数组是有length属性的 它就能执行下方的循环操作 ;而此处的Array.prototype.slice.call(arguments,0)调用的slice方法他的this指向的是类数组的arguments;它同样具有length属性;所以 可以将函数中的参数集合转化成数组格式;

由此可以衍生出的Array.prototype.slice.call({0:1,1:2,2:3,length:3},0)  ==>[1,2,3]

Array.prototype.slice.call({0:1,3:3,length:4},0)  ==>[1, undefined × 2, 3]||[1, undefined , undefined , 3];

等类数组转化成数组的方式

时间: 2024-10-31 20:53:17

浅谈Array.prototype.slice.call(arguments,0)的相关文章

将函数的实际参数转换成数组的方法,习惯用Array.prototype.slice.call(arguments)

实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组. 我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组. 方法一:通过Array.prototype属性调用slice方法 var args = Array.prototype.slice.call(arguments); Array 本身是没有 slice 方法,它的方法在 Arr

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

在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1.基本讲解 1.在js里Array是一个类 slice是此类里的一个方法 ,那么使用此方法应该Array.prototype.slice这么去用 slice从字面上的意思很容易理解就是截取(当然你不是英肓的话) 这方法如何使用呢? arrayObj.slice(start, [end]) 很显然是截取数组的一部分.

伪数组转为数组 Array.prototype.slice.call(arguments)

我们知道,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

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

我们知道,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}

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

我们知道,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}

Array.prototype.slice.call(arguments)

话说可以通过call()来让arguments来继承array的slice()方法. 可是为何使用arguments.slice(1)会报错, 而这样使用Array.prototype.slice.call(arguments,1)就可以正常. function name(){ Array.prototype.slice.call(arguments); console.log(arguments.slice(1)); } name("some","thing");

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

我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组 如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法 分析一下这个方法: Array.prototype:Array其实一个类名,但是调用类里面的方法只能够通过类的实例对象调用所以这里用了  Array.prototype 通过它自身的原型对象调用 其次是slice():这个是Array类里面的一个方法功能是截取数组里面的某一部分内容,它接收两个参数slice('数组下标起始位置','数

Array.prototype.push.apply(a,b)和Array.prototype.slice.call(arguments)

Array.prototype.push.apply(a,b) 时常看到在操作数组的时候有这样的写法: var a = [1,2,3]; var b = [4,5,6]; a.push.apply(a, b); console.log(a) //[1,2,3,4,5,6] 其实这样的写法等价于: var a = [1,2,3]; var b = [4,5,6]; Array.prototype.push.apply(a, b); console.log(a) //[1,2,3,4,5,6] 这样

(转)Array.prototype.slice.call自解

很多框架或者库里面都会有这句的使用,最多的还是通过Array.prototype.slice.call(arguments,0)把arguments这个伪数组转换为真正的数组.但为什么可以这么做,却一直是半懂不懂的.昨天晚上看了mootools的源码,google了一下,终于彻底明白了. call方法的作用就不用多说了,Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没