我希望这个问题不是太简单,但我不知道:(
如何在函数名称中使用 var 启动函数?
例如 ...
我的职能
function at_26();
function at_21();
function at_99();
启动功能
var test_id = 21;
at_'+test_id+'(); // doesn't work
我希望有人可以帮助我。
提前致谢!彼得
我希望这个问题不是太简单,但我不知道:(
如何在函数名称中使用 var 启动函数?
例如 ...
我的职能
function at_26();
function at_21();
function at_99();
启动功能
var test_id = 21;
at_'+test_id+'(); // doesn't work
我希望有人可以帮助我。
提前致谢!彼得
将您的函数存储在一个对象中,而不是将它们置于顶层。
var at = {
at_26: function() { },
at_21: function() { },
at_99: function() { }
};
然后您可以像访问任何其他对象一样访问它们:
at['at_' + test_id]();
你也可以直接从window
对象访问它们......
window['at_' + test_id]();
...并避免将它们存储在一个对象中,但这意味着在应该避免的全局范围内播放。
你很接近。
var test_id = 21
this['at_'+test_id]()
但是,您可能想要的是:
at = []
at[21] = function(){ xxx for 21 xxx }
at[test_id]()
你也可以试试
function at_26(){};
function at_21(){};
function at_99(){};
var test_id = 21;
eval('at_'+test_id+'()');
但是,如果您有非常充分的理由使用 eval,请使用此代码。在 javascript 中使用 eval 不是一个好的做法,因为它有一些缺点,例如“使用不当可能会打开你的脚本进行注入攻击”。
有一个更好的方法,然后 window 对象 - 这在 firefox 中不友好 - 使用“self”代替 - 所以在 Quentin 发布的示例中,它看起来像这样:
self['at_' + test_id]();
将参数数组传递给这些组合函数的示例,.
/* Store function names and match params */
let at = {
at_26 : (a,b,c) => at_26(a,b,c),
at_21 : (a,b,c) => at_21(a,b,c),
at_99 : (a,b,c) => at_99(a,b,c),
at_om : (a,b,c,d,e) => at_om(a,b,c,d,e)
}
/* Dynamic function router: name + array of Params */
function dynFunc(name, arrayParams){
return at[name](...arrayParams)
}
/* Usage examples */
dynFunc(`at_${99}`, ["track001", 32, true])
dynFunc("at_" + "om", ["track007", [50, false], 7.123, false, "Bye"])
/* In the scope */
function at_99(a,b,c){
console.log("Hi! " + a,b,c)
console.log(typeof(a), typeof(b), typeof(c))
}
function at_om(a,b,c,d,e){
console.log("Hi! " + a,b,c,d,e)
console.log(typeof(a), typeof(b), typeof(c), typeof(d), typeof(e))
}