我已经在全局范围内注册了一些javascript函数:
function Test1() {}
function Test2() {}
现在我要运行所有名称以'Test'开头的javascript函数,该怎么做?
我想防止将每个函数保存到变量中,因为它无法缩放。也不要将它们推送到队列中并稍后执行它们,因为人们在编写测试时需要记住将其功能添加到队列中,而我不希望那样做。
答案 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
开头以及其类型是否为函数即可。