首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Array.method和[].method的区别

Array.method和[].method的区别
EN

Stack Overflow用户
提问于 2018-04-19 11:58:47
回答 3查看 248关注 0票数 1
代码语言:javascript
运行
复制
Array.from([1,3,10,5], x => x + x); // [2,6,20,10]
[1,2,10,5].from( x => x + x); // TypeError
[1,3,10,5].pop(); // 5

为什么用不同的方式调用数组的不同方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-19 12:02:29

给定一个实例arr of Arrayarr.method等同于Array.prototype.method

注意里面的.prototype

所以arr.pop()Array.prototype.pop.call(arr)是一样的。但是,Array.from中没有prototype,它是一个直接位于数组构造函数本身上的方法,不能(很容易)使用数组实例访问。

如果您熟悉其他面向对象的语言(Java、C#等),那么Array.from本质上是一个静态方法,而Array.prototype.pop本质上是一个实例方法。

票数 1
EN

Stack Overflow用户

发布于 2018-04-19 12:01:07

from函数存在于Array对象本身中。所以您需要通过Array实例调用它。您还可以使用new Array[]创建一个与Array不同的数组。创建数组时,它与Array实例的函数无关。它只引用它的原型链中的Array.prototype,从中获取函数和属性,如lengthpop。通常说,Array.prototype中的内容--可以从数组([])访问,Array实例本身中的内容--不是,您需要通过Array实例调用它们。

票数 2
EN

Stack Overflow用户

发布于 2018-04-19 12:00:56

在第二种情况下,您希望map使用要应用于每个元素的函数返回经过修改的数组。

代码语言:javascript
运行
复制
 [1,2,10,5].map(x => x + x); // [2,6,20,10]

在我看来,这正是你想要的。

关于Array.from的更多解释。

这是一个“静态”函数,意味着它不能像您在第二行中尝试的那样应用到实际的数组实例上,只能在类Array上使用。如果用Javascript的话来说,这不是Array.prototype的一部分。

用于解释该功能的用途的文档说明:

来自:Objects/Array/from

Array.from()允许您从以下位置创建数组: 类似数组的对象(具有长度属性和索引元素的对象)或可迭代对象(可以在其中获取其元素的对象,如Map和Set)。 Array.from()有一个可选参数mapFn,它允许您对正在创建的数组(或子类对象)的每个元素执行映射函数。 更清楚的是,Array.from(obj,mapFn,thisArg)的结果与Array.from(obj).map(mapFn,thisArg)相同,只是它没有创建中间数组。

因此,在您的示例中,Array.from(yourArray, mapFunc)的使用似乎比简单地使用youArray.map(mapFunc)更不清楚,因为使用Array.from的真正兴趣在于您没有数组,但是可以将其转换为数组。

在本例中,还可以方便地将mapFunction作为第二个参数,以避免首先创建临时数组,然后将元素映射到新的最终数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49920564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档