addCallListener (example 3, custom function)

JavaScript

window.addCallListener = function(func, callback){
        var callNumber = 0;
        return function(){
            var args = [].slice.call(arguments);
            var result;
            try {
                result = func.apply(this, arguments);
                callNumber++;
            } catch (e) {
                callback(e, args, this, callNumber);
                throw e;
            }
            callback(result, args, this, callNumber);
            return result;                 
        }
    }
    
    
    var logSomething = function(something){
        console.log(something);
    }
    
    logSomething = addCallListener(logSomething , function(result, args, self, callNumber){
        console.log('logSomething  has been called. \n\
            Result is ', result,  '.\n\
            Arguments are', args, '.\n \
            Self is ', self, '. \n\
            Number of calls ', callNumber, '.'
        );
    });
    
    logSomething ('fuck yeah!');
    logSomething ('It\'s gonna be legen...');
    logSomething ('...Wait for it...');
    logSomething ('...dary');