javascript - 如何使用 map() 调用对象列表共有的方法?

标签 javascript arrays object

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/

相关文章:

php - 如何排列网页上的当前用户数?

object - 超越对象实例的比较

javascript - 使用 jQuery 获取具有类的所有元素的总美元

c# - 如何访问剪贴板图像并将其保存在 ASP.NET Web 应用程序中的服务器位置?

javascript - 多重选择在继续后忘记选择的值

javascript - 为什么 for..in 循环不遍历对象的原型(prototype)

java - java中是否可以创建 "Class Objects"的类?

javascript - 使用 JavaScript 将字节数组显示为图像

javascript - 使用下划线 countBy 作为数组中对象的嵌套属性

mysql - 内爆日期数组并插入 MySQL 数据库