我的对象回电话:
var MyObject = {
CallBack: "function (whichSubMenuIsClicked, subMenuObjectTag) { self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);}",
}
回调是一个字符串。现在我需要使用MyObject.CallBack(param1,param2)执行它 如何使用jquery或javascript完成此操作。在这种情况下,self是调用另一个小部件的原始小部件。因此,回调是在原始小部件上。
答案 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)");