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

我期待 Function 的一些有用功能

4

3 回答 3

1

您可以使用方括号表示法将字符串标识符用于对象属性名称:

obj['identifier'] === obj.identifier

但是,您可以将变量作为对象属性访问的唯一上下文是全局变量,因为它们是作为全局(浏览器中的窗口)对象的属性添加的:

var global = this;
var name = 'fred';
alert(global['name']); // fred

您无法访问任何其他执行上下文的变量对象,但您可以使用eval来评估字符串:

alert( eval('name'))

但强烈建议不要这样做。使用对象属性而不是方括号表示法。

于 2013-06-12T02:58:28.843 回答
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 可以调用的内容。

于 2013-06-12T03:08:32.430 回答
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();
于 2013-06-12T03:15:19.110 回答