我正在查看Mozilla开发者页面上地图功能的文档,并对其中一个示例提出疑问。
这是dev页面的链接。我正在看“一般使用地图”的例子。我还包括以下代码:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
var map = Array.prototype.map;
var a = map.call('Hello World', function(x) { return x.charCodeAt(0); });
// a now equals [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
首先,使用“一般”地图是什么意思。我猜这与
有关var map = Array.prototype.map;
对我来说还有一件事是JS中的原型。用我自己的话来说,我理解的是它可以用来改变一个函数的工作方式,它可以用一种方法来为JS添加类的功能。
无论如何,这个存储在map变量中的是什么?为什么他们现在可以将字符串传递给map函数的args?在地图上调用map函数而不是执行以下操作的重点是什么:
var a = 'Hello World'.split('').map( function(x) { return x.charCodeAt(0); });
答案 0 :(得分:6)
首先使用map“generically”来表示他们的意思。
“一般使用map”意味着在不是数组的东西上使用Array.prototype.map()
。它适用于字符串'Hello World',因为'Hello World'将返回一个长度,并且可以像数组一样迭代。
对我来说还有一件事是JS中的原型
我喜欢将原型视为“本类内置的东西”。例如,假设您正在制作涉及赛车的视频游戏。所有车辆都能够“驾驶”和“停止”。您可以创建一个“车辆”类,并将“驱动器”和“停止”方法保存到其原型中,而不是制作数百辆车并一次又一次地键入“驱动器”和“停止”方法。现在,当您创建'FastCar'时,您将使它成为'Vehicle'的实例,然后可以访问那些原型'Drive'和'Stop'方法,而无需每次重新编写它们每一次。
这个存储在地图变量中的是什么?
您在上面发布的map
变量只是引用Array.prototype.map
,因此不需要每次都输入更长的形式。
为什么他们现在可以将字符串传递给map函数的args
字符串未作为map函数的参数传递。相反,地图在字符串本身上被称为。
你帖子中的在地图上调用地图功能有什么意义
var map
实际上并没有调用 Array.prototype.map
,它需要在末尾加上括号来实际调用它,如下所示:Array.prototype.map()
而不是做
之类的事情
您提出的解决方案没有任何问题,但我认为文档会向您展示它的灵活性以及如何始终针对同一问题采用不同的解决方案。
答案 1 :(得分:3)
看起来他们的意思是“一般地”使用它是在不是实际数组的东西上使用它,但它具有数组的接口。
许多内置数组函数可用于任何类似数组的数组(数字索引和.length
属性),这里也是如此。
将函数存储在变量中对此没有实际影响。这将实现相同的结果:
var a = Array.prototype.map.call('Hello World', function(x) { return x.charCodeAt(0); });
为什么他们现在可以将字符串传递给map函数的args?
他们不是。每个函数上存在的.call()
方法允许您为方法调用指定this
值,因此从本质上讲,它就像在执行:
'Hello World'.map(function(x) { return x.charCodeAt(0); });
除非你不能这样做,因为字符串没有.map
方法。
在地图上调用地图功能而不是做......之类的事情是什么意思。
我认为这里的要点是证明它可以完成,但另一个好处是它会跳过额外的.split()
操作。