diff options
author | Ariel Flesler <aflesler@gmail.com> | 2008-04-30 00:09:55 +0000 |
---|---|---|
committer | Ariel Flesler <aflesler@gmail.com> | 2008-04-30 00:09:55 +0000 |
commit | cd455eeba7ef754f35a36b10ca27a31c14bb8a1f (patch) | |
tree | 188b7cb40464ea9603543ef5aa194e5f1aebe384 | |
parent | 17b1e407d101c5c7f91db633df3a80cd9b4466ae (diff) | |
download | jquery-cd455eeba7ef754f35a36b10ca27a31c14bb8a1f.tar.gz jquery-cd455eeba7ef754f35a36b10ca27a31c14bb8a1f.zip |
jquery core: extend() now supports deep + extending jquery itself
cached some vars and it proved to be faster.
-rw-r--r-- | src/core.js | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/core.js b/src/core.js index 1353ebad2..80115b442 100644 --- a/src/core.js +++ b/src/core.js @@ -566,9 +566,9 @@ jQuery.extend = jQuery.fn.extend = function() { target = {}; // extend jQuery itself if only one argument is passed - if ( length == 1 ) { + if ( length == i ) { target = this; - i = 0; + --i; } for ( ; i < length; i++ ) @@ -576,17 +576,19 @@ jQuery.extend = jQuery.fn.extend = function() { if ( (options = arguments[ i ]) != null ) // Extend the base object for ( var name in options ) { + var src = target[ name ], copy = options[ name ]; + // Prevent never-ending loop - if ( target === options[ name ] ) + if ( target === copy ) 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( deep, target[ name ], options[ name ] ); + if ( deep && copy && typeof copy == "object" && src && !copy.nodeType ) + target[ name ] = jQuery.extend( deep, src, copy ); // Don't bring in undefined values - else if ( options[ name ] != undefined ) - target[ name ] = options[ name ]; + else if ( copy != undefined ) + target[ name ] = copy; } |