对Javascript的array.prototype.slice.call浅谈

对Javascript的array.prototype.slice.call浅谈
前面写的
在JS,我们经常看到写array.prototype.slice.call方式(参数0)。当然,这个方法功能可能对每个人都很清楚,那就是将类数组对象转换成一个真正的数组。

这涉及到切片()方法和调用()方法,所以首先要说这两种方法。

切片()方法
数组和字符串有这片的方法,以及该方法的功能是截取一段数据。它接收两个参数,第一个参数是截取的位置索引,第二个参数是可选的,拦截指示终点的位置,但不包括末端位置。在数组的方法的返回值是一个由截流元件阵列。在字符串中,该方法的返回值是由截取字符串组成的字符串。

该方法还可以引入负值。当参数为负数时,添加到数组或字符串长度的正数作为实际参数。

如下:
{ 1 2 3 4 5 6片(2,4)};

{ 1 2 3 4 5 6 }。片(4 - 2);

返回值是{ },这是一个数组。
一切片(2,4);

一切,切片(- 4,- 2);

返回值are'er'and'hi ',分别为字符串。

如果它被引入到一个参数中,即从开始位置到结束位置的所有元素的输出。

其他类似的字符串方法
字符串中有两种方法,而切片()方法类型

Substring()和substr()方法。

substring()方法是,从一开始到结束位置的字符串返回。substr()接受两个参数,第一个参数所代表的开始位置,第二个参数表示的字符数进行拦截,这是从第一个方法略有不同。

当传入方法的参数为负时,这三种方法略有不同。

当传入方法的参数为负数时:

切片(),如上所述,是负数的正值加上字符串的长度。

子串的参数()方法是零。

函数的第一个参数()方法是负价值加上字符串长度的积极价值,第二个参数设置为零。

调用()和应用()方法
调用()和应用()方法主要用于扩展函数的作用域。

调用()和应用()方法接收两个参数:

应用程序():第一个参数是作用域,第二个参数数组,其中第二个参数可以是数组实例或参数对象。

调用()方法还接收两个参数,它们只与应用程序()的引用模式不同:传递函数的参数必须一个一个地编写。

鉴于这不是重点,这里不再需要描述。
array.prototype.slice.call(参数0)
在array.prototype.slice.call(参数0),Array.prototype.slice被称为原型阵列的方法,这是一个真正的数组切片()方法,但对于某些类型的数组对象的参数或者自己定义的长度,虽然有一些属,但没有片()方法,因此,这类数组对象的你使用原型法使用片()的方法,Array.prototype.slice(即如果在自定义层自定义数组对象()方法,然后可以通过调整直接)。

所以,Array.prototype.slice.call(参数0)的含义是可以理解的:类的参数,我们称之为array.prototype.slice原型法,并利用电话()方法,在参数定义的范围,在那里Array.prototype可以理解为论据,切片(0)用相同的参数,第一个参数的方法,即起始位置指标。这样,参数类数组转换为一个真正的数组。

当然,也可以将参数转换为数组,这样代码将更自然,而不是直接。

我们知道Array.prototype.slice.call(参数)可以变换成数组对象的长度属性,除了节点设置在IE(因为DOM对象在IE中的COM对象的形式实现JS对象和COM对象不能转化)。

如:

var a = {长度:2.0:'all',1:第二};
array.prototype.slice.call(一); / / {第一
var = {长度:2 };
array.prototype.slice.call(一); / / {定义,定义}
也许刚开始学习JS的童鞋并不能真正理解为什么可以这样做。

首先,片有两个用途,一是string.slice,一是array.slice,第一个是字符串,第二个是数组,这里我们看到二。

array.prototype.slice.call(参数)参数可以变成一个数组,然后arguments.toarray()。片();这里是不能够说array.prototype.slice.call(参数)的第一个参数是该过程中的第一个将被传递到数组中,然后调用片吗
再看看调用的使用,下面的例子

var =函数(){()
console.log(本); / / 'littledu
console.log(typeof这); / /对象
console.log(这是字符串); / /真的
}
a.call('littledu);
可以看出,在调用之后,当前函数被推入传递参数的范围。我不知道这是否正确,但无论如何,这将指向它已经通过的对象。

在这里,它几乎是一样的,我们可以大胆猜测切片的内部实现,如下所示
array.prototype.slice =功能(开始、结束){
var =新数组();
开始的开始| | = 0;
结束=结束| | this.length; / /这是指调用对象,使用电话时,可以改变这一点,这是传递给对象,这是关键
对于(var i =开始;i <结束;i + +){
Result.push(本{我});
}
返回结果;
}

这可能是它的方式。

最后,变成数组的一般函数。
VaR的toArray =函数(){
尝试{
返回array.prototype.slice.call(S);
} catch(e){
var arr = { };
对于(var i = 0,len = s.length;我< len;i++){
/ / arr.push(S {我});
ARR {我} = S {我}; / /这是说要快于推
}
报酬;
}
}
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部