Javascript:调用在没有eval的变量中定义的函数

时间:2013-02-17 20:45:00

标签: javascript jquery jquery-plugins

我正在编写一个jQuery插件,它挂钩滚动和拖动事件,并在触发相关事件时旋转元素指向另一个元素。基本上我的插件只检测事件,计算正确的角度,并使用第三方插件相应地旋转元素。为了更好地解释,您可以看到demos of my plugin

我不想强制使用某个旋转插件,因此旋转功能的名称可能会有所不同。目前我正在使用eval来允许自定义函数名称,但我想找到另一种方法。我试过谷歌搜索,但到目前为止还没有找到解决方案。

那么,有没有办法解决这个问题?旋转功能的名称存储在settings.rotateFunction:

eval("$(this)." + settings.rotateFunction + "(angle)");

到目前为止,我已尝试过“new Function(codeToEval)”方法,但由于某种原因,这会破坏$(this)的使用。

2 个答案:

答案 0 :(得分:5)

在Javascript对象中,可以使用以下两种表示法访问成员(属性或函数):

  • object.memberName
  • object["memberName"]

第二个在成员在设计时不知道而在运行时期间特别有用。这就是为什么你可以用这种方式调用你的旋转功能:

$(this)[settings.rotateFunction](angle);

答案 1 :(得分:4)

使用以下语法:

$(this)[settings.rotateFunction](angle);