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

Sch*_*aus -1 javascript jquery jquery-plugins

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

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

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

eval("$(this)." + settings.rotateFunction + "(angle)");
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了"new Function(codeToEval)"方法,但由于某种原因这打破了$(this)的使用.

Rob*_*nik 5

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

  • object.memberName
  • object["memberName"]

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

$(this)[settings.rotateFunction](angle);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,一个非常有用的答案,完美的工作! (2认同)