From: John Resig Date: Tue, 21 Aug 2007 04:42:31 +0000 (+0000) Subject: Make deep .extend() an optional argument - it will go deep if you pass in an boolean... X-Git-Tag: 1.1.4~15 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e112e6b04d1736d3a847d44b96f7178175e17a15;p=jquery.git Make deep .extend() an optional argument - it will go deep if you pass in an boolean as the first argument (fixed bug #1028). --- diff --git a/src/ajax/ajax.js b/src/ajax/ajax.js index 4f0b2e8fd..d9b3a3d8b 100644 --- a/src/ajax/ajax.js +++ b/src/ajax/ajax.js @@ -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 ) { diff --git a/src/jquery/coreTest.js b/src/jquery/coreTest.js index ff8909c8b..312bc3ce1 100644 --- a/src/jquery/coreTest.js +++ b/src/jquery/coreTest.js @@ -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" ); diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 797280e07..a79b2e6b2 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -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