我有以下javascript方法:
function 123_test_function(){
}
该函数由java生成并发送到客户端。 123是组件的id,因此它可以改变。即我可以使用另一个名为111_test_function()
的函数
我想传递这个函数作为参考。
所以我需要创建引用
var 123_test_function = function 123_test_function(){
}
在对象内的另一个js文件中,我有一个需要使用123_test_function引用的函数,如下所示:
useFunction(123_test_function);
我遇到的问题是函数的123
部分。
在这个对象中,我有一个变量(uniqueID
),它在函数的开头有数字。
我需要函数调用类似于:
useFunction(uniqueID+"_test_function");
这似乎没有传递函数,而是传递一个字符串。 我做错了吗?
答案 0 :(得分:3)
例如,标识符(例如函数名称)不能以数字开头。
要解决您的问题,请使用对象,如下所示:
// 1. define an object to hold all your functions
var allFunctions = {};
// 2. store any function with a unique string as the ID
allFunctions['123_test_function'] = function () {
// whatever
};
// 3. call the function
allFunctions['123_test_function']();
allFunctions[uniqueID + '_test_function']();
对象是关联数组。它们存储键/值对,因此它们完全符合您的要求。
请注意,函数在JavaScript中不需要名称,因此我在步骤2中没有使用。
答案 1 :(得分:0)
如果函数被定义为全局函数,它将是全局对象的成员(在浏览器的情况下为window
)。因此,您只需window['id_'+uniqueID+'_test_function']
即可访问您的功能
useFunction(window['id_'+uniqueID+'_test_function'])
(标识符不能以JavaScript中的数字开头,所以我添加了'id_'
前缀。您当然可以根据自己的喜好进行更改。)
答案 2 :(得分:0)
function test_function(number){
if(number == 1)
{
return function() {}
}
if(number == 2)
{
return function() {}
}
}
像这样调用函数
var func = test_function(1)
func();
答案 3 :(得分:0)
正如一些人正确指出的那样,函数(或实际上是变量)名称不能以数字开头。这种语法也是错误的:
var 123_test_function = function 123_test_function(){
}
正确的语法是:
var 123_test_function = function() {
};
......虽然也应该注意到它的效果与“传统”
完全相同function 123_test_function() {
}
...声明,在window
对象的上下文中 - 因为window
实际上是浏览器中JS环境的全局范围,所以它不是无论您如何定义功能,它们始终可以从任何地方访问。准确理解在Javascript中声明函数的每种方法的含义很重要 - 幸运的是,Douglas Crockford to the rescue再一次......
人们已经建议了从字符串上下文中调用命名函数的各种方法,这基本上是尝试使用“变量变量”语法,这是一个已经讨论过的主题on SO和elsewhere at长度。应尽可能避免使用eval()
方法 - 如果您发现自己需要eval()
的机会,那么您在某个地方出错了。 @Tomalak对一个对象中保存的函数集合有正确的想法,但是仍然需要稍微混乱的字符串方法来引用实际上由数字ID访问的内容。收集方法的优点是不会使window
对象与可能是单/零使用成员混淆。
但是我看到它的方式,你在这里实际需要的只是一个索引的函数数组,你需要的只是数字索引才能访问它们。我建议你创建这样的函数:
// Do this once at the top of your JS
var test_functions = [];
// Now, for each function you define:
test_functions[123] = function() {
// Do stuff here
};
// And when you need to call the functions:
var funcId = 123;
test_functions[funcId]();