Make deep .extend() an optional argument - it will go deep if you pass in an boolean...
authorJohn Resig <jeresig@gmail.com>
Tue, 21 Aug 2007 04:42:31 +0000 (04:42 +0000)
committerJohn Resig <jeresig@gmail.com>
Tue, 21 Aug 2007 04:42:31 +0000 (04:42 +0000)
src/ajax/ajax.js
src/jquery/coreTest.js
src/jquery/jquery.js

index 4f0b2e8..d9b3a3d 100644 (file)
@@ -434,7 +434,7 @@ jQuery.extend({
         * @cat Ajax
         */
        ajaxSetup: function( settings ) {
-               jQuery.extend( jQuery.ajaxSettings, settings );
+               jQuery.extend( true, jQuery.ajaxSettings, settings );
        },
 
        ajaxSettings: {
@@ -575,7 +575,7 @@ jQuery.extend({
        ajax: function( s ) {
                // Extend the settings, but re-extend 's' so that it can be
                // checked again later (in the test suite, specifically)
-               s = jQuery.extend(s, jQuery.extend({}, jQuery.ajaxSettings, s));
+               s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
 
                // if data available
                if ( s.data ) {
index ff8909c..312bc3c 100644 (file)
@@ -680,7 +680,7 @@ test("$.extend(Object, Object)", function() {
        isObj( settings, merged, "Check if extended: settings must be extended" );
        isObj( options, optionsCopy, "Check if not modified: options must not be modified" );
 
-       jQuery.extend(deep1, deep2);
+       jQuery.extend(true, deep1, deep2);
        isObj( deep1.foo, deepmerged.foo, "Check if foo: settings must be extended" );
        isObj( deep2.foo, deep2copy.foo, "Check if not deep2: options must not be modified" );
 
index 797280e..a79b2e6 100644 (file)
@@ -1256,7 +1256,13 @@ jQuery.fn = jQuery.prototype = {
  */
 jQuery.extend = jQuery.fn.extend = function() {
        // copy reference to target object
-       var target = arguments[0] || {}, a = 1, al = arguments.length;
+       var target = arguments[0] || {}, a = 1, al = arguments.length, deep = false;
+
+       // Handle a deep copy situation
+       if ( target.constructor == Boolean ) {
+               deep = true;
+               target = arguments[1] || {};
+       }
 
        // extend jQuery itself if only one argument is passed
        if ( al == 1 ) {
@@ -1276,7 +1282,7 @@ jQuery.extend = jQuery.fn.extend = function() {
                                        continue;
 
                                // Recurse if we're merging object values
-                               if ( typeof prop[i] == 'object' && target[i] )
+                               if ( deep && typeof prop[i] == 'object' && target[i] )
                                        jQuery.extend( target[i], prop[i] );
 
                                // Don't bring in undefined values