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);