执行字符串作为javascript函数

时间:2012-11-23 14:10:08

标签: javascript jquery

我的对象回电话:

var MyObject = {
CallBack: "function (whichSubMenuIsClicked, subMenuObjectTag) { self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);}",
}

回调是一个字符串。现在我需要使用MyObject.CallBack(param1,param2)执行它 如何使用jquery或javascript完成此操作。在这种情况下,self是调用另一个小部件的原始小部件。因此,回调是在原始小部件上。

4 个答案:

答案 0 :(得分:3)

只是没有将该函数作为字符串。

将功能作为功能:

var MyObject = {
   CallBack: function (whichSubMenuIsClicked, subMenuObjectTag) {
                  self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);
             }
}

答案 1 :(得分:1)

使用Function构造函数,它接受参数名称列表,后跟函数体:

var MyObject = {
    CallBack: "self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier)",
};

var myfunc = new Function("whichSubMenuIsClicked", "subMenuObjectTag", MyObject.CallBack);

答案 2 :(得分:0)

你应该将函数编写为函数,正如@Curt演示的那样。只有当你真的别无选择而不是将其作为字符串(例如来自用户输入)时,你首先需要将其解析为可以调用的可执行代码。这样做的方法是eval。问题将成为引用self,它不是函数内部的变量,并且将被假定为全局变量。但是,您可以使用with statement来解决这个问题:

var MyObject = {
    CallBack: "function (whichSubMenuIsClicked, subMenuObjectTag) { self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);}",
};
var widget = {doStuff: console.log};
var fn;
with( {self: widget} ) {
    fn = eval( MyObject.CallBack );
}
fn({SubMenuItem: "…", HeaderColumnName: "…", DivIdentifier: "…"});

答案 3 :(得分:-2)

非常差的方法但你可以通过eval()

来实现
var MyObject = { CallBack: "AName = function(param1, param2) { alert(param1 + param2); }", }

eval(MyObject.CallBack+"(1,2)"); 

Demo