2015-09-26 54 views
0

我有像这样的对象:调用使用字符串的方法

var x = { 
    "fx": function() {...} 
} 

我有对象(y = "x")和功能(z = "fx")的名称和它们作为字符串。

我知道我可以通过使用eval通过以下方法或类似的调用函数:

eval(y.z) 

不过,我想避免使用eval做到这一点。我知道apply原型方法接受一个函数并将其应用于一个对象,但是因为该函数包含在对象中,所以不可能搜索函数引用。

我知道这个问题不是一个新问题,因此必须有一个解决方案,但我找不到它。任何帮助,将不胜感激。

+1

为什么要指定'Y = “X”'?你可以使用'x [z]()','eval'不好,应该避免使用 – Tushar

+0

我只是用它来表示对象名称是一个字符串;我没有以任何方式或形式使用eval。 – Carey

回答

2

您可以使用

x[y]() 

调用函数具有可变

+0

这是正确的,谢谢。我想为未来的读者指出,可以通过使用'window [x]'获得对象。 – Carey

+0

@Saikyr只有在全局范围内定义对象 – nils

+0

这是正确的,你猜你必须从全局范围链接引用到正确的范围。 – Carey

0

就我的理解是,y和z是一些变量,你想利用这些调用Ÿ对象的Z法变量。

它可以通过各种方式完成。例如:

(function() { 
x = { 
    "fx": function() { 
     alert("Hey!"); 
    } 
} 
    y = "x"; 
    z = "fx"; 
    this[y][z](); 
}()); 

DemoFiddle