【问题标题】:execute all functions beginning or contain "xx" in function name执行所有以函数名称开头或包含“xx”的函数
【发布时间】:2020-11-29 14:08:03
【问题描述】:

我有一个有很多功能的js文件

function one(){
//do stuff
}

function two(){
//do stuff
}

function execute_top_one(){
//do stuff
}

function execute_top_two(){
//do stuff
}

并且我需要创建一个函数来执行,例如,所有以函数名称中以“execute_top”开头(或包含)“execute_top”的函数,而不是像这样手动调用所有函数

execute_top_one();
execute_top_two();

有什么建议吗?

【问题讨论】:

  • 听起来您以错误的方式处理此问题。你为什么需要它?拥有一个包含函数的数组并执行所有函数不是更有意义吗? (并且可能是一个包含多个这样的数组的对象?)
  • 嗯,你说得对。这将是最合乎逻辑的事情。但是我没有这样的水平能够从零开始创建它。有什么可以参考我的例子吗?
  • 我找到了this example 的一个函数数组,但是我想要的是不必写数组(或者动态生成就可以了),因为我可以有4个函数或120个函数并且我不想留下任何执行。

标签: javascript jquery function each


【解决方案1】:

我建议你换个方式:

const functionStore = {
  one: function() {
    console.log('one')
  },
  two: function() {
    console.log('two')
  },
  execute_top_one: function() {
    console.log('execute_top_one')
  },
  execute_top_two: function() {
    console.log('execute_top_two')
  },
}

const execute_these = "execute_top"

const executeFunctions = (functionStore, filterString) => {
  Object.entries(functionStore).forEach(([fnName, fn]) => {
    if (fnName.indexOf(filterString) !== -1) {
      fn()
    }
  })
}

executeFunctions(functionStore, execute_these)

不同之处在于你将你的函数集合到一个object(我称之为functionStore,然后创建过滤字符串&函数。从sn-p中可以看到,过滤object的键和值(在我的 sn-p 中称为 fnNamefn)非常简单 - 在过滤器中您可以调用存储的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多