Simple functional approach:
function appendFirstArgumentIf (fn,argumentTest){
return function(a,...b){
return argumentTest(a) ? fn(...b,a) : fn(a,...b)
}
}
using:
function myFunction(callback, string){
string = string ? string : 'Default Message'
callback(string)
}
var myNewFunction = appendFirstArgumentIf(myFunction,
firstArgument=> typeof firstArgument !== 'function')
myNewFunction('New Message', console.log)
myNewFunction(console.log)
also possible with this:
function mySecondFunction(callback, name, string){
string = string ? string : 'Welcome'
callback(string, name)
}
var myLatestFunction = appendFirstArgumentIf(mySecondFunction,
firstArgument=> typeof firstArgument !== 'function')
myLatestFunction('Hello', console.log, 'John')
myLatestFunction(console.log, 'John')
source
share