在全局范围内查找和调用javascript函数

时间:2018-09-24 22:43:37

标签: javascript

我已经在全局范围内注册了一些javascript函数:

function Test1() {}
function Test2() {}

现在我要运行所有名称以'Test'开头的javascript函数,该怎么做?

我想防止将每个函数保存到变量中,因为它无法缩放。也不要将它们推送到队列中并稍后执行它们,因为人们在编写测试时需要记住将其功能添加到队列中,而我不希望那样做。

3 个答案:

答案 0 :(得分:5)

var globalKeys = Object.keys(window);

for(var i = 0; i < globalKeys.length; i++){
  var globalKey = globalKeys[i];
  if(globalKey.includes("Test") && typeof window[globalKey] == "function"){
    window[globalKey]();
  }
}

答案 1 :(得分:2)

function Test() { console.log('test') }
Object.keys(window).filter(s => s.startsWith('Test')) // [ "Test" ]

如您所见,函数是在全局范围内定义的。

const isTest = s => typeof s === 'function' && s.startsWith('Test')
Object.keys(window).filter(isTest).map(t => t())

我不完全了解您的用例,但我怀疑最好提供您自己的对象。

const tests = {}
tests.Test1 = () => {/*...*/}

答案 2 :(得分:0)

您可以获取window的所有元素并进行检查。 这是一个基本的起点:

for(let objectName in window){ console.log(`${objectName} : ${typeof window[objectName]}`) }

现在objectName实际上是一个字符串,可以是任何字符串,只需检查它是否以Test开头以及其类型是否为函数即可。