我不确定这是否可行。我想传递一个函数名作为参数,如
loadContent("http://test.com/", specialFunction);
specialFucntion
只是一个字符串:
function loadContent(href, functionIWant){
$.ajax({
type: "GET",
url: href,
dataType: "json",
success: function(res, textStatus, xhr) {
helper();
functionIWant + "()"; //So this would be treated as function
//and it actually calls specialFunction()
//is it possible for this?
}
});
}
我如何实现这一目标?
添加-打开
让我们说,我会传递一个函数名称数组,我该怎么称它?
for(var i = 0; i < functionIWant.length; i++){
functionIWant[i]; // how? appeciate a lot :)
}
答案 0 :(得分:3)
您只需使用functionIWant()
使用您提供的代码段的示例:
function loadContent(href, functionIWant)
{
$.ajax({
type: "GET",
url: href,
dataType: "json",
success: function(res, textStatus, xhr) {
helper();
functionIWant();
}
});
}
您的附录
假设您要调用以下三个功能
function foo() {alert("Foo")}
function bar() {alert("bar")}
function baz() {alert("baz")}
如果您将一组函数名称作为字符串传递,我可以推荐的最好的方法是遵循建议here。基本上,你可以这样做:
// Assuming FunctionIWant is an array of strings that represent function names
FunctionIWant = ["foo","bar","baz"];
...
for(var i=0;i<FunctionIWant.length;i++)
window[FunctionIWant[i]]();
但是,如果FunctionIWant是一个实际函数数组,您可以简单地迭代它们并像这样单独调用它们:
FunctionIWant = [foo,bar,baz] // note, these are not strings
for(var i=0;i<FunctionIWant.length;i++)
FunctionIWant[i]();
在大多数情况下,您最好分配功能而不是字符串
答案 1 :(得分:2)
如果您想尝试调用参数表示的函数,只需将其称为该函数的名称:
function loadContent(href, callback)
{
$.ajax({
type: "GET",
url: href,
dataType: "json",
success: function(res, textStatus, xhr) {
helper();
callback();
}
});
}
答案 2 :(得分:1)
我猜测functionIWant
是一个字符串,而不是对函数的引用[在提问时你应该清楚明白]
如果是这种情况,则需要
window[functionIWant]();
如果函数在全局范围内,那将会有效。传入函数的引用或命名函数会更好。
var myFuncs = {
foo : function(){ alert("asdf"); },
bar : function(){ alert("qwerty"); }
};
var functionIWant = "foo";
myFuncs[functionIWant]();
答案 3 :(得分:0)
var function1 = function( value ) {
console.log( "foo: " + value );
};
var function2 = function( value ){
console.log( "bar: " + value );
};
并且在functionIWant数组中,您有函数名称,
function loadContent(href, functionIWant)
{
$.ajax({
type: "GET",
url: href,
dataType: "json",
success: function(res, textStatus, xhr) {
helper();
var callbacks = $.Callbacks();
for(var i = 0; i < functionIWant.length; i++){
callbacks.add( functionIWant[i] ); //on i=0 add function1
callbacks.fire( "hello" ); // will fire function1
}
}
});
}