addCallListener (example 2, arrays)

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;                 
        }
    }
    
    
    Array.prototype.push = addCallListener(Array.prototype.push, function(result, args, self, callNumber){
        console.log('Array.prototype.push has been called. \n\
            Result is ' + result + '. \n\
            Arguments are ' + args + '. \n\
            Self is ' + self + '. \n\
            Number of calls ' + callNumber + '. \n');

    });
    
    
    arr1 = [1,2,3,4,5];
    arr2 = new Array(11,12,13,14,15);

    arr1.push(6,7);
    arr1.push(8);
    Array.prototype.push.apply(arr1, [9,10]);
    
    arr2.push(16);
    [].push.call(arr2, 17, 18);