2013-10-24 52 views
0

如何创建一个接受参数作为函数的函数?javascript中的事件监听器

我有这个功能,我想用一个函数也是参数来调用它:

function ShowDialog(OnSubmit) 
{ 
    var _result = OnSubmit(); 

    alert(_result); 
} 

这是我想称之为:

ShowDialog(
       { 
        OnSubmit: function() { 
         return "Hello World"; 
        } 
       } 
     ); 

this will alert "Hello World in browser" 
+1

你正在传递一个属性的对象,但期望一个函数... – Bergi

+0

这是什么要求? –

回答

1

JavaScript有first-class functions,所以你可以直接传递给函数参考,你并不需要一个对象:

function showDialog(callback) { 
    var result = callback(); 
    alert(result); 
} 

function bye() { return "bye!" }; 

showDialog(function() { return "Hello!" }); 
showDialog(bye); 

var greetings = { ciao: function() { return "Ciao!" } }; 

showDialog(greetings.ciao); 

当然,你可以也要通过完整的对象,在这种情况下,您需要修改功能如下:

function showDialog(options) { 
    var result = options.onSubmit(); 
    alert(result); 
} 

然后:

showDialog({ 
    onSubmit: function() { return "Hello!" } 
}); 

showDialog({ 
    onSubmit: bye 
}); 

您也实现接受两个对象和回调函数:

function showDialog(options) { 
    var result = typeof options === 'function' ? options() : options.onSubmit(); 
    alert(result); 
} 

showDialog({ 
    onSubmit: bye 
}); 

showDialog(bye); 

希望它能帮助。

1

试试这个:

function ShowDialog(param) 
{ 
    var _result = param.OnSubmit(); 
    alert(_result); 
} 

ShowDialog({ 
    OnSubmit: function() { 
     return "Hello World"; 
    } 
}); 
4

致电:

ShowDialog(function(){ 
    return "Hello World"; 
}); 

然后你的函数可以保留为:

function ShowDialog(OnSubmit) 
{ 
    var _result = OnSubmit(); 

    alert(_result); 
}