Вам не нужно передавать всю функцию, только свойство.Как насчет:
function Test(prop, arg) {
( stuffToDo[prop] || stuffToDo.def )( arg );
};
Test('whatever', myArr);
Другой способ, которым я мог бы придумать, - это определить stuffToDo как тестовую функцию, а затем добавить литерал объекта в качестве статических методов для этой функции:
var stuffToDo = function(prop, arg) {
( stuffToDo[prop] || stuffToDo.def )( arg );
}
stuffToDo.bar = function( arr ) { alert('bar'); }
stuffToDo.def = function() { alert('default'); }
stuffToDo('bar');
even (инкапсуляция объекта):
var stuffToDo = function( prop, arg ) {
({
bar: function(arr) {
alert(arr[0]);
},
baz: function() {
alert('baz');
}
}[prop] || function() {
alert('default');
})( arg );
}
stuffToDo('bar', [1,2,3]);
stuffToDo('404'); // default
ОК, последний был немного грязным:)
javascript, так много шаблонов проектирования ....