Skip to content

Commit 5e0a2ca

Browse files
committed
Widget: Fixed $.widget.extend() to never copy objects by reference.
1 parent d535f68 commit 5e0a2ca

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

ui/jquery.ui.widget.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,14 @@ $.widget.extend = function( target ) {
142142
for ( ; inputIndex < inputLength; inputIndex++ ) {
143143
for ( key in input[ inputIndex ] ) {
144144
value = input[ inputIndex ][ key ];
145-
if (input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
146-
if ( $.isPlainObject( value ) && $.isPlainObject( target[ key ] ) ) {
147-
target[ key ] = $.widget.extend( {}, target[ key ], value );
145+
if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
146+
// Clone objects
147+
if ( $.isPlainObject( value ) ) {
148+
target[ key ] = $.isPlainObject( target[ key ] ) ?
149+
$.widget.extend( {}, target[ key ], value ) :
150+
// Don't extend strings, arrays, etc. with objects
151+
$.widget.extend( {}, value );
152+
// Copy everything else by reference
148153
} else {
149154
target[ key ] = value;
150155
}

0 commit comments

Comments
 (0)