Bug Tracker

Opened 14 years ago

Closed 13 years ago

#1028 closed enhancement (fixed)

.extend() recursively

Reported by: vmx Owned by: john
Priority: major Milestone: 1.1.4
Component: core Version: 1.1.3
Keywords: Cc:
Blocked by: Blocking:

Description (last modified by john)

extend() doesn't go through the properties recursively. For the following case:

var a = {prop1: {prop1a: "1a", prop2a: "5a"}};
var b = {prop1: {prop1a: "1b"}};
$.extend(a, b);

you would expect the result:

a = {prop1: {prop1a: "1b", prop2a: "5a"}

but the result currently is:

a = {prop1: {prop1a: "1b"}

It copies (overwrites) the property "prop1" from "b" wihthout keeping "prop2a" from "a".

This code snipped fixes the bug (just replace the while loop in "jQuery.extend" with this code)

	while (prop = arguments[a++])
		// Extend the base object
		for ( var i in prop )
                {
                    // prevent endless inheritances/loops
                    if (target == prop[i])
                        continue;

                    // extend recursively if current prop is an object, and
                    // target has props of the same name
                    if (typeof prop[i] == 'object' && target[i])
                        jQuery.extend(target[i],prop[i]);
                    else
                        target[i] = prop[i];
                }

Change History (5)

comment:1 Changed 14 years ago by john

Type: bugenhancement

comment:2 Changed 13 years ago by john

Description: modified (diff)
need: Review
Owner: set to john

comment:3 Changed 13 years ago by john

Milestone: 1.1.31.1.4
Resolution: fixed
Status: newclosed
Version: 1.1.21.1.3

Fixed in SVN rev [2783].

comment:4 Changed 13 years ago by john

Resolution: fixed
Status: closedreopened

Fails violently with the dimensions plugin - I figured something like this would happen, need to make it an optional argument.

comment:5 Changed 13 years ago by john

Resolution: fixed
Status: reopenedclosed

Fixed in SVN rev [2816-2817].

Note: See TracTickets for help on using tickets.