2013-06-12 62 views
2
var func = function(){}; 
var funcName = "func"; 
funcName.call(); 

我很期待功能我可以将字符串标识符作为函数吗?

+2

如果是在窗口范围,你可以做'窗口[了funcName()'。 – elclanrs

+2

如果你附加它来说窗口,例如,你可以说'window.func = function(){};'然后'窗口['func']();'但我不会推荐它。你试图解决的实际问题是什么? – asawyer

回答

1

您可以用方括号使用对象的属性名称字符串标识符的一些有用的功能:

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

然而,唯一的情境中,你可以作为对象属性的访问变量用于全局变量,因为它们作为全局属性(浏览器中的窗口)添加为对象:

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

您不能访问任何其他执行上下文的变量对象,但你可以使用EVAL评估字符串:

alert(eval('name')) 

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

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可以调用的内容。

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(); 
相关问题