Javascript 我可以调用字符串标识符作为函数吗?
我期待着函数的一些有用功能您可以使用方括号表示法为对象属性名称使用字符串标识符:Javascript 我可以调用字符串标识符作为函数吗?,javascript,Javascript,我期待着函数的一些有用功能您可以使用方括号表示法为对象属性名称使用字符串标识符: var func = function(){}; var funcName = "func"; funcName.call(); 但是,可以将变量作为对象属性访问的唯一上下文是全局变量,因为它们是作为全局(浏览器中的窗口)对象的属性添加的: 您不能访问任何其他执行上下文的变量对象,但可以使用eval对字符串求值: var global = this; var name = 'fred'; alert(global
var func = function(){};
var funcName = "func";
funcName.call();
但是,可以将变量作为对象属性访问的唯一上下文是全局变量,因为它们是作为全局(浏览器中的窗口)对象的属性添加的:
您不能访问任何其他执行上下文的变量对象,但可以使用eval对字符串求值:
var global = this;
var name = 'fred';
alert(global['name']); // fred
但强烈建议不要这样做。使用对象属性,而不是方括号表示法。如果您正在考虑使用用户输入来选择要应用的函数,某些用户可能会发现该功能(*)的用法令人讨厌,将函数指定为哈希值可能更安全,可能如下所示: (*)然后,访问者可以随意编辑他们收到的站点javascript副本,所以这可能是没有意义的
alert( eval('name'))
请注意操作对象的使用如何限制userChoice可以调用的内容 我知道这并不是你想问的,但在某些情况下,这可能是一个更好的选择 您也可以直接处理对函数本身的引用,而不是将函数名用作字符串 看起来是这样的:
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
如果它在窗口范围内,您可以执行
window[funcName]()
。例如,如果您将它附加为window,您可以说window.func=function(){}代码>然后窗口['func']()代码>但我不推荐它。您试图解决的实际问题是什么?
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
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();