Skip to main content

Bug Tracker

Side navigation

#12105 closed enhancement (duplicate)

Opened July 19, 2012 10:27AM UTC

Closed July 19, 2012 12:22PM UTC

Last modified July 19, 2012 12:22PM UTC

jQuery.extend - extend model (custom object) by plain object (JSON response from server)

Reported by: sergey.buturlakin@gmail.com Owned by:
Priority: undecided Milestone: None
Component: unfiled Version: git
Keywords: Cc:
Blocked by: Blocking:
Description

Now jQuery.extend (deep copy) doesn't allow to extend custom object by server response (plain object from JSON)

http://jsfiddle.net/C4duF/

On deep copy jQuery requires both property values to be plain objects to proceed recursively, otherwise it replaces value in target.

Could this be changed to requirement when target could be any object (not only plain) but other side must be plain?

// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
	if ( copyIsArray ) {
		copyIsArray = false;
		clone = src && jQuery.isArray(src) ? src : [];

	} else {
		// CHNAGE FROM:
		//clone = src && jQuery.isPlainObject(src) ? src : {};
		// CHNAGE TO:
		clone = !src || jQuery.type(src) !== "object" || src.nodeType || jQuery.isWindow( src ) ? {} : src;
	}

	// Never move original objects, clone them
	target[ name ] = jQuery.extend( deep, clone, copy );

// Don't bring in undefined values
} else if ( copy !== undefined ) {
	target[ name ] = copy;
}
Attachments (0)
Change History (2)

Changed July 19, 2012 12:22PM UTC by dmethvin comment:1

resolution: → duplicate
status: newclosed

Changed July 19, 2012 12:22PM UTC by dmethvin comment:2

Duplicate of #10014.