2013-10-24 2 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); 
} 
Смежные вопросы