]> source.dussan.org Git - jquery-ui.git/commitdiff
Widget: Handle `Object.create(null)` for options objects
authorScott González <scott.gonzalez@gmail.com>
Fri, 21 Apr 2017 18:49:52 +0000 (14:49 -0400)
committerScott González <scott.gonzalez@gmail.com>
Mon, 24 Apr 2017 16:41:29 +0000 (12:41 -0400)
Fixes #15179
Closes gh-1809

tests/unit/widget/extend.js
ui/widget.js

index 36575200b61deba9b908a0d57950c14a7719f779..b27d925f03c41e1490a97292c9a6cfdfb5356c39 100644 (file)
@@ -5,7 +5,7 @@ define( [
 ], function( QUnit, $ ) {
 
 QUnit.test( "$.widget.extend()", function( assert ) {
-       assert.expect( 27 );
+       assert.expect( 28 );
 
        var ret, empty, optionsWithLength, optionsWithDate, myKlass, customObject, optionsWithCustomObject, nullUndef,
                target, recursive, obj, input, output,
@@ -108,6 +108,11 @@ QUnit.test( "$.widget.extend()", function( assert ) {
        assert.deepEqual( input, output, "don't clone arrays" );
        input.key[ 0 ] = 10;
        assert.deepEqual( input, output, "don't clone arrays" );
+
+       input = Object.create( null );
+       input.foo = "f";
+       output = $.widget.extend( {}, input );
+       assert.deepEqual( input, output, "Object with no prototype" );
 } );
 
 } );
index f876757129a97ede4c2369db171510ddc27adf17..011396811983cd723cea891218d4041abce87764 100644 (file)
@@ -26,6 +26,7 @@
 }( function( $ ) {
 
 var widgetUuid = 0;
+var widgetHasOwnProperty = Array.prototype.hasOwnProperty;
 var widgetSlice = Array.prototype.slice;
 
 $.cleanData = ( function( orig ) {
@@ -183,7 +184,7 @@ $.widget.extend = function( target ) {
        for ( ; inputIndex < inputLength; inputIndex++ ) {
                for ( key in input[ inputIndex ] ) {
                        value = input[ inputIndex ][ key ];
-                       if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+                       if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {
 
                                // Clone objects
                                if ( $.isPlainObject( value ) ) {