使用传递给函数的文本来调用javascript函数

时间:2012-06-03 15:24:34

标签: javascript object eval

我试图弄清楚如何使用jquery使用从div中取出的文本调用javascript函数,如下所示:

$('#selector').attr('id');

返回的id是一个文本对象,我想用它来调用同名的javascript对象。基本上我在一个日历和一组对象中有一个约会,其中包含背景中的各种变量,如原因,时间,位置等。这些对象是使用像这样的自定义构造函数创建的。

function appt(id,...){
  this.id;
  etc...
 }
 var appt12 = new appt(id,...);

然后我希望能够将它作为var id = appt12.id行的对象来调用。

我发现我可以使用eval来做到这一点,但在这个论坛上似乎有很多关于使用eval的争论。我担心它可能很慢,在安全性上它只会在浏览器中调用,所以大多数安全性都会发生在我的php中。

使用eval会如下所示:

var apptObj = eval(apptid);

传递给eval后,text id可以用作对象的引用。虽然我读了其他帖子,但这不是最佳做法。

关于解决此问题的非评估方法的任何想法。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您应该将函数保存在这样的对象中:

var operations = {
    "add": function(){...},
    "remove": function(){...},
    "edit": function(){...}
};

然后这样称呼:

var op = element.id;
operations[op]();

你可以使用Ufuk提到的全局窗口对象,但它通常不赞成。如果你有几个相关的函数,将它们保存在一个对象中并防止它们在全局范围内浮动被认为更干净,更有条理。

答案 1 :(得分:0)

如果您要调用的函数是全局函数,则可以通过window object的索引到达它。

//get the function first
var myFunction = window[functionName];

//call the function with your parameters
myFunction(param);

<强>更新

如果我理解你正在尝试使用id创建变量,如果是这种情况你就可以这样做:

window['appt'+id] = appt(id);

就像丹尼斯提到的那样,如果你不使用全局变量会更好。相反,您可以将所有这些变量保存在另一个对象中这是一个例子:

//initialize it if it is undefined
var apptHolder = apptHolder || {};

//assign the property
apptHolder['appt'+id] = appt(id);

//if you need the apptHolder to be global
window.apptHolder = apptHolder;