我可以将字符串标识符称为函数吗?

时间:2013-06-12 02:39:09

标签: javascript

var func = function(){};
var funcName = "func";
funcName.call();

我期待功能

的一些有用功能

3 个答案:

答案 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();