`

js伪数组元素转成数组的方法详解

    博客分类:
  • JS
阅读更多

 

1。Array.prototype:就是Array的原型,很多时候理解这个原型有点不清不楚的

其实,有点像.NET里的反射

一个类凡是通过prototype加的属性,方法,都可以在这个类的对象里找到 对象.

有时候我们也直接在某一对象添加属性方法,那么只能这个对象里找到,重新创建的对象是没有

刚刚在上一对象里添加的属性方法的

内置的类型可以通过prototype找到内置的属性方法

Array.prototype.slice这句就是访问Array的内置方法

因为Array是类名,而不是对象名,所以不能直接用Array.slice

 

2。接下来说slice方法,这个简单

返回一个数组的一段。arrayObj.slice(start, [end]) 参数开始索引和结束索引,结束索引可以省略

3。call方法

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

调用一个对象的一个方法,以另一个对象替换当前对象

thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。

说明

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj

这东西JS文档里我没找到怎么调用这个方法,功能是 调用一个对象的一个方法 自己的参数只有方法的所有者对象和要调用的方法参数,

查过资料才知道,Array.prototype.slice.call 是这么调用,只要 typesof fn ==="function" 的 fn类型都有 call 方法

 
 
 

 伪组数元素

 
 
call 方法以另一个对象替换当前对象
thisObj   可选项。将被用作当前对象的对象。
这就是说:Array.prototype.slice.call(arguments,0) 这句里,就是把 arguments 当做当前对象
也就是说 要调用的是 arguments 的slice 方法,后面的 参数 0 也就成了 slice 的第一个参数slice(0)就是获取所有

为什么要这么调用 arguments 的slice 方法呢?就是因为 arguments 不是真的组数,typeof arguments==="Object" 而不是 "Array"

它没有slice这个方法,通过这么Array.prototype.slice.call调用,JS的内部机制应该是 把arguments对象转化为Array

因为Array.prototype.slice.call调用后,返回的是一个组数

 

经典例子:

<script type="text/javascript">//<![CDATA[
function classA() {
    this.name='bluedestiny';
    this.show = function () {
        alert(this.name);
    }
}
function classB() {
    this.name = 'never-online';
}
 
var objA = new classA();
var objB = new classB();
 
objA.show.call(objB);
//]]></script>

跟call类似的还有 apply 方法

 

应用某一对象的一个方法,用另一个对象替换当前对象。

apply([thisObj[,argArray]])
 

参数

thisObj
可选项。将被用作当前对象的对象。
argArray
可选项。将被传递给该函数的参数数组。

说明

如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。

如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

呵呵,这么火星的功能,实在是少见啊,估计也就是JS里

 两者的区别: 对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])

同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入 

转自http://www.cnblogs.com/anncesky/archive/2011/03/13/1982540.html
分享到:
评论

相关推荐

    JS Array.from()将伪数组转换成数组的方法示例

    伪数组是指那些具有`length`属性和索引属性,但不具备数组方法(如`push`、`pop`等)的对象。常见的伪数组包括函数的`arguments`对象和某些DOM方法返回的结果,如`querySelectorAll`。例如: ```javascript let ...

    js中将HTMLCollection/NodeList/伪数组转换成数组的代码

    类数组对象转换成数组后,我们便可以使用数组的方法来处理这些元素。下面详细解释一些如何转换类数组对象为数组,以及转换后可以进行的操作。 ### 1. 类数组对象的定义和特点 类数组对象的特点如下: 1. 具有...

    js将类数组对象转换成数组对象

    Prototype.js的$A方法则尝试调用传入对象的toArray方法,如果不存在,则通过遍历该对象的length属性来创建一个新数组,数组的每个元素对应对象的一个属性值。 Mootools的$A方法则检查传入对象是否拥有item属性,若...

    js中将HTMLCollection NodeList 伪数组转换成数组的代码.docx

    这些对象虽然表现得像数组,但并不具备数组的所有特性,比如它们没有`push`、`pop`等数组方法。因此,在某些情况下,我们需要将这些对象转换为真正的数组,以便更好地利用数组提供的功能。本文将详细介绍如何进行...

    将HTMLCollection/NodeList/伪数组转换成数组的实现方法

    这里把符合以下条件的对象称为伪数组 1,具有length属性 2,按索引方式存储数据 3,不具有数组的push,pop等方法 如 1,function内的arguments 。 2,通过document.forms,Form.elements,Select.options,document....

    JavaScript类数组对象转换为数组对象的方法实例分析

    本文实例分析了JavaScript类数组对象转换为数组对象的方法。分享给大家供大家参考,具体如下: 1、类数组对象: 拥有length属性,可以通过下标访问; 不具有数组所具有的方法。 2、为什么要将类数组对象转换为数组...

    JavaScript伪数组用法实例分析

    在JavaScript编程中,伪数组(或称为类数组)是一个常见的概念,它和真正的数组有很多相似之处,但却不具备数组的一些属性和方法,比如不具备数组的push、pop、shift、unshift等方法,也不能直接调用数组的toString...

    xml转换数组、对象转数组

    php将对象转成数组,php将xml转成数组 一个自定义函数搞定纯原创。

    XML转换成数组

    把XML数据转换成php数组形式。

    js读取本地文件到字节数组

    ### JS读取本地文件到字节数组 在Web开发中,经常需要处理用户上传的文件,例如图片、文档等。这些文件可能来源于用户的本地计算机,并通过Web页面上传至服务器。为了实现这一功能,通常的做法是将文件内容转换为...

    js数组去重的N种方法(小结)

    在JavaScript中,数组去重是一个常见的需求,旨在从数组中删除重复的元素,仅保留唯一的元素。本文介绍了多种js数组去重的方法,并按照ES5和ES6的标准进行了区分。以下是对这些方法的知识点总结。 1. ES5 实现方法...

    PB POWERBUILDER 字符串 数组 相互 转换 转化

    |PowerBuilder 数组字符串相互转化 天津 李华锋 * * | | * *PowerBuilder 数组字符串相互转化 完全免费 * * | | * *如果你将这个程序放在你的网站上,我希望你能同时加上本站的链接 | | * | * | * *老字符串转数组...

    Javascript数组及其操作

    Javascript 数组及其操作 Javascript 数组是一种基本的数据结构,用于存储和操作多个值。数组是一种复杂的数据类型,可以存储不同的数据类型,如数字、字符串、对象等。 创建数组 在 Javascript 中,可以使用三种...

    将数组转换成JSON对象

    在IT领域,将数组转换为JSON对象是一项常见且重要的技能,尤其在前后端数据交互、存储和传输数据时。从给定的文件标题和描述中,我们可以提炼出以下几个关键知识点: ### 1. JSON(JavaScript Object Notation)...

    将数据转换成数组

    在Python中,可以使用`numpy`库的`save`或`savez_compressed`方法来保存数组数据,后者还能提供压缩功能。 4. **开发中的应用**:转换后的数组文件在开发中有多种用途。例如,在音乐识别、音频分析或信号处理项目中...

    PHP 将 XML文件或内容直接转成数组

    - 如果传入的是数组,则遍历每个元素并递归调用自身。 - 如果传入的是对象,则获取其所有变量并递归调用自身。 - 如果对象没有任何变量或者不是对象,则直接返回该值。 #### 示例代码分析 ```php /** * 将XML...

Global site tag (gtag.js) - Google Analytics