aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core.js17
-rw-r--r--test/unit/core.js10
2 files changed, 11 insertions, 16 deletions
diff --git a/src/core.js b/src/core.js
index 1d5a25bd5..b82133635 100644
--- a/src/core.js
+++ b/src/core.js
@@ -272,19 +272,10 @@ jQuery.extend = jQuery.fn.extend = function() {
continue;
}
- // Recurse if we're merging object values
- if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
- var clone;
-
- if ( src ) {
- clone = src;
- } else if ( jQuery.isArray(copy) ) {
- clone = [];
- } else if ( jQuery.isObjectLiteral(copy) ) {
- clone = {};
- } else {
- clone = copy;
- }
+ // Recurse if we're merging object literal values
+ if ( deep && copy && jQuery.isObjectLiteral(copy) ) {
+ // Don't extend not object literals
+ var clone = src && jQuery.isObjectLiteral(src) ? src : {};
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
diff --git a/test/unit/core.js b/test/unit/core.js
index b355a8c40..9b43c4889 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -553,16 +553,20 @@ test("jQuery.extend(Object, Object)", function() {
same( empty.foo, optionsWithDate.foo, "Dates copy correctly" );
var myKlass = function() {};
- var optionsWithCustomObject = { foo: { date: new myKlass } };
+ var customObject = new myKlass();
+ var optionsWithCustomObject = { foo: { date: new customObject } };
empty = {};
jQuery.extend(true, empty, optionsWithCustomObject);
- same( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly (no methods)" );
+ ok( empty.foo && empty.foo.date && empty.foo.date === customObject, "Custom objects copy correctly (no methods)" );
// Makes the class a little more realistic
myKlass.prototype = { someMethod: function(){} };
empty = {};
jQuery.extend(true, empty, optionsWithCustomObject);
- same( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly" );
+ ok( empty.foo && empty.foo.date && empty.foo.date === customObject, "Custom objects copy correctly" );
+
+ var ret = jQuery.extend(true, { foo: 4 }, { foo: new Number(5) } );
+ ok( ret.foo == 5, "Wrapped numbers copy correctly" );
var nullUndef;
nullUndef = jQuery.extend({}, options, { xnumber2: null });