【问题标题】:Calling instance function on each object in array对数组中的每个对象调用实例函数
【发布时间】:2016-03-22 07:55:07
【问题描述】:

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

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

但我希望有一个像下面这样不那么冗长的版本,但它不起作用。

items.forEach.show(false);

甚至

items.show(false);

有更清洁的方法吗?

【问题讨论】:

  • items.forEach((i) => i.show(false));
  • 谢谢,但这并不像我希望的那样干净。当涉及的括号较少时,它更容易阅读。这是我能得到的最好的吗?
  • 是的...正在使用ES6 arrow functions
  • 如果你想要更少的括号你应该考虑使用另一种语言而不是 js ^^
  • 哈!我希望 :) 我来自 C++ 背景,所以我渴望更好的东西...... :)

标签: javascript object foreach


【解决方案1】:

1) 最短的方法是使用ES 6 arrow functions:

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);

【讨论】:

  • 是否有一个辅助函数可以让它像我想要的那样干净?我没有想到一个。
  • 勾选选项2
  • 因为我希望能够调用任何类似这样的函数。我想避免必须输入每个函数并为其设置一个迭代器。这意味着助手需要支持我传递的任何函数名称,以及函数可能具有的变量参数列表。
  • forEach 需要一个函数来迭代。您需要以一种或另一种方式定义函数。
  • 如果有更简洁的方法,我不必使用“forEach”。我只想在每个对象中调用一个函数。
猜你喜欢
  • 2011-11-21
  • 2014-12-03
  • 1970-01-01
  • 2019-01-17
  • 2013-07-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多