在数组中的每个对象上调用实例函数

Calling instance function on each object in array

本文关键字:调用 实例 函数 对象 数组      更新时间:2023-09-26

我有一个包含实例方法的对象数组。我可以遍历每个对象并像这样专门调用它:

items.forEach(function(i) { i.show(false) });

但是我希望像下面这样不那么冗长的版本,这是行不通的。

items.forEach.show(false);

甚至

items.show(false);

有没有更清洁的方法?

1) 最短的方法是使用 ES 6 箭头函数:

items.forEach(i => i.show(false));

2) 使用辅助函数:

function iterator(i) { 
  i.show(false) 
}
items.forEach(iterator);

3) 定义生成器:

function gen() {
   var funcName = arguments[0],
     params = Array.prototype.slice.call(arguments, 1);
   return function(item) {
      item[funcName].apply(item, params);
   };
}
items.forEach(gen('show', false));     // -> i.show(false);
items.forEach(gen('show', true));      // -> i.show(true);
items.forEach(gen('delete', 1, true)); // -> i.delete(1, true);