Intercepting JavaScript methods
If for some reason you want to intercept any JavaScript method, so whenever this method is called, you want to inject a piece of code to be executed either before or after it..
for example the following code, will log to console each new item is pushed to any array in the system, also it will warn us if any array goes beyond the 1000 element...
// cache a reference for original
// Array push method
var _push = Array.prototype.push;
// define your own push method
Array.prototype.push = function( item ) {
// before Array push is called
console.log( 'pushing ', item, ' into ', this );
// call original Array push method
_push.apply( this, arguments );
// do whatever you like after
// the push has been called
if( this.length > 1000 ) {
console.warn( 'potential memory leak going on here!!', this );
}
}
Written by Anas Nakawa
Related protips
6 Responses
You shouldn't change the built-in objects :P
Have a look at http://underscorejs.org/#wrap and https://github.com/gameboxed/YouAreDaBomb
totally agree Victor, this was just an example, and i was trying to detect memory leakage in arrays, so it was temporary solution
but mainly the idea applies anywhere not only limited to built-in objects :)
Yes, I know you are not extending natives, I was just teasing you :p
Some people use this approach for AOP - see hexagonal.js
@viczam using _.wrap you will do the same as @anasnakawa wrote
@avenger7x I know - https://github.com/documentcloud/underscore/blob/master/underscore.js#L715
I just wanted to point out some libraries that does that for you. It's better to use named conventions when working in a team.
every time i see underscore.js used somewhere, it just gets more awesome.