Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
137
rated 0 times [  138] [ 1]  / answers: 1 / hits: 37107  / 14 Years ago, mon, december 27, 2010, 12:00:00

Is there way to override jQuery's core functions ?
Say I wanted to add an alert(this.length) in size: function()
Instead of adding it in the source



size: function() {
alert(this.length)
return this.length;
},


I was wondering if it would be possible to do something like this :



if (console)
{
console.log(Size of div = + $(div).size());
var oSize = jQuery.fn.size;
jQuery.fn.size = function()
{
alert(this.length);

// Now go back to jQuery's original size()
return oSize(this);
}
console.log(Size of div = + $(div).size());
}

More From » jquery

 Answers
150

You almost had it, you need to set the this reference inside of the old size function to be the this reference in the override function, like this:



var oSize = jQuery.fn.size;
jQuery.fn.size = function() {
alert(this.length);

// Now go back to jQuery's original size()
return oSize.apply(this, arguments);
};


The way this works is Function instances have a method called apply, whose purpose is to arbitrarily override the inner this reference inside of the function's body.



So, as an example:



var f = function() { console.log(this); }
f.apply(Hello World, null); //prints Hello World to the console

[#94490] Wednesday, December 22, 2010, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jazminuniquer

Total Points: 63
Total Questions: 121
Total Answers: 96

Location: Cambodia
Member since Thu, May 21, 2020
4 Years ago
;