var func = function(){};
var funcName = "func";
funcName.call();
我期待功能
的一些有用功能答案 0 :(得分:1)
您可以使用方括号表示法为对象属性名称使用字符串标识符:
obj['identifier'] === obj.identifier
但是,您可以将变量作为对象属性访问的唯一上下文是全局变量,因为它们是作为全局(浏览器中的窗口)对象的属性添加的:
var global = this;
var name = 'fred';
alert(global['name']); // fred
您无法访问任何其他执行上下文的变量对象,但您可以使用 eval 来评估字符串:
alert( eval('name'))
但强烈建议不要这样做。使用对象属性而不是方括号表示法。
答案 1 :(得分:0)
如果您正在考虑使用用户输入来选择要应用的函数,则某些用户可能会发现对该功能的讨厌使用(*),并且将函数指定为散列值可能更安全,可能如下所示:
(*)然后,访问者可以随意编辑他们收到的网站javascript的副本,所以这可能没有实际意义。
function rotate(){
rotate an image;
}
function resize(){
resize an image;
}
operations = { 'rotate': rotate, 'resize': resize };
...
try {
(operations[userChoice])();
} catch(e){ console.log(e); } // or maybe tell the user there is no such function
请注意操作对象的使用如何限制userChoice可以调用的内容。
答案 2 :(得分:0)
我知道这并不是你所要求的,但在某些情况下它可能是更好的选择。
您可以直接处理函数本身的引用,而不是将函数的名称用作字符串。
看起来像这样:
function func() { // normal function definition
}
var func2 = function() {}; // anonymous function
var function_to_use = func; // works with normal functions
function_to_use();
function_to_use = func2; // as well as anonymous ones
function_to_use();