jQuery.extend: Make overridden functions available to "Subclass"
Hey guys
I've added a little enhancement to jQuery on my local computer. Maybe
you consider it as usefull and integrate it in next jQuery release?
Anyways... it's just the ability to access overriden functions by
jQuery.extend. I've updated the jQuery.extend function with following
3 lines of code:
// Make overridden functions available to "Subclass"
if ( typeof( target[ name ] ) == "function" )
target[ "__super_" + name ] = target[ name ];
And here the full function with the added code:
jQuery.extend = jQuery.fn.extend = function() {
// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length,
deep = false, options;
// Handle a deep copy situation
if ( target.constructor == Boolean ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
// Handle case when target is a string or something (possible in deep
copy)
if ( typeof target != "object" && typeof target != "function" )
target = {};
// extend jQuery itself if only one argument is passed
if ( length == 1 ) {
target = this;
i = 0;
}
for ( ; i < length; i++ )
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null )
// Extend the base object
for ( var name in options ) {
// Prevent never-ending loop
if ( target === options[ name ] )
continue;
// Recurse if we're merging object values
if ( deep && options[ name ] && typeof options[ name ] == "object"
&& target[ name ] && !options[ name ].nodeType )
target[ name ] = jQuery.extend( target[ name ],
options[ name ] );
// Don't bring in undefined values
else if ( options[ name ] != undefined ) {
// Make overridden functions available to "Subclass"
if ( typeof( target[ name ] ) == "function" )
target[ "__super_" + name ] = target[ name ];
target[ name ] = options[ name ];
}
}
// Return the modified object
return target;
};