aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriel Flesler <aflesler@gmail.com>2008-04-30 00:09:55 +0000
committerAriel Flesler <aflesler@gmail.com>2008-04-30 00:09:55 +0000
commitcd455eeba7ef754f35a36b10ca27a31c14bb8a1f (patch)
tree188b7cb40464ea9603543ef5aa194e5f1aebe384
parent17b1e407d101c5c7f91db633df3a80cd9b4466ae (diff)
downloadjquery-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.js16
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;
}