2013-10-24 90 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); 
}