我有一个泛型函数,可以在适当的对象中与多个其他函数对话,是否可以使用字符串来调用相应的函数。
var string = "save";
var generic = (new function (string) {
string."alert()";
return this;
})
var save = (new function (string) {
this.alert = (function () {
alert("your document has been saved")
return this
})
return this
})
var notSaved = (new function (string) {
this.alert = (function () {
alert("your document has not been saved")
return this
})
return this
})
我正在使用它进行更复杂的设置,但这是一个例子。这可能吗?
答案 0 :(得分:1)
当然可以。尝试这样的事情:
window[string].alert();
答案 1 :(得分:1)
查看您的代码很难说明您实际尝试实现的目标。尽管如此,这里有一些可能相关的想法。
首先,让我们做几个对象:
var rabbit = {
name: 'Peter',
hop: function () {
return this.name + ' hopped!'
},
jump: function () {
return this.name + ' jumped!'
}
}
var hairy_maclary = {
name: 'Hairy Maclary',
jump: function () {
return this.name + ' jumped over the fence!'
}
}
现在,您可以定义一个函数,该函数在传递给它的任何对象上调用hop
方法:
function hop(object) {
return object.hop()
}
hop(rabbit) // 'Peter hopped!'
我不确定你为什么这样做而不是直接调用hop
,但也许你想在之前或之后做更多的事情。
如果您愿意,可以创建一个完全通用的函数,该函数将调用给定对象上的给定方法:
function invokeMethod(object, method) {
object[method]()
}
invokeMethod(hairy_maclary, 'jump') // 'Hairy Maclary jumped over the fence!'
但是,这是一件非常奇怪的事情。也许你可以提供更多关于你实际尝试做什么的想法,因为你的示例代码相当奇怪。
答案 2 :(得分:0)
您可以将您的函数包含在某个对象中,这样您就可以通过使用某个变量(在本例中名为string
)传递属性的名称来访问,例如。那样:
var string = 'notSaved';
var funcs = {};
funcs.save = new function(){
this.alert = function(){
alert('called save.alert()');
};
return this;
};
funcs.notSaved = new function(){
this.alert = function(){
alert('called notSaved.alert()');
};
return this;
};
funcs[string].alert();
请参阅working example on jsfiddle。
如果您的变量是全局的(它们不应该),它们也会自动包含在window
对象中,因此您也可以像这样调用它们:window[string].alert()
。这不适用于非全局函数(在这种情况下,我的解决方案似乎是唯一一个不使用eval()
)的解决方案。
答案 3 :(得分:-1)
的eval( “警报( '测试');”);
您可以使用eval调用函数。即使你可以声明函数。
eval(“function test(){alert(”test“);}”);
试验();