TL;DR:基本上,我正在尝试使用 Array.prototype.map()
来调用上下文对象列表的通用方法。
假设我有这样的代码:
a.doSomething();
b.doSomething();
c.doSomething();
d.doSomething();
e.doSomething();
...
这太冗长了。我希望能够将此代码缩短为类似这样的内容
[a, b, c, d, e].map(doSomething);
因为我不想使用 for
循环。
在没有任何外部库的情况下,我如何能够使用 JS 中的原生 map
函数来做到这一点?
提前致谢!如果这篇文章太长,我会很乐意编辑它。冲着我尖叫。
相关问题:
How to use map() to call class methods on a list of objects
How to call same method for a list of objects?
我没有使用相关问题中的信息,因为 Python 和 JS 使用不同的范例,而且我不能保证它们的工作方式相同。如果我在这里错了,请毫不犹豫地把我烧死。
额外信息,如果您愿意,请忽略:
我已经 already RTFM ,并且措辞和示例表明我不能使用 map
执行上述操作。 MDN 文档将 map
描述为“在数组中的每个元素 上调用提供的函数”,而 MSDN 文档说它“调用函数 数组的每个元素,并返回一个数组。”我不是要在 数组上调用方法,而是要从 多个上下文对象调用方法。如果这不可能,是否有原生的 polyfill?
我在游戏中使用它,所以速度是我主要关心的问题。如果有更好的编码方式,请告诉我!
最佳答案
我能想到的最接近的是
[a, b, c, d, e].forEach(function(item) {item.doSomething()});
使用 [].map 对您的目的毫无意义
编辑,你也可以这样做
Array.prototype.fnName = function(methodName) {
var args = Array.prototype.slice.call(arguments, 1);
this.forEach(function(item) {
item[methodName].apply(item, args);
});
};
我用过 fnName
,你可以称它为 fnMap
或其他你觉得有意义的名字
你会像这样使用它
[a,b,c].fnName('doSomething', param1, param2 ...)
关于javascript - 如何使用 map() 调用对象列表共有的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31633202/