Skip to content Skip to sidebar Skip to footer

Why Does Jquery Extend Deep Copy Not Recursively Copy An Object?

I've searched everywhere and found similar questions with answers that didn't really address my issue so I apologize if this seems like a repeat, but it appears from my experimenti

Solution 1:

For one, you aren't creating normal objects.

I'm looking at the source code for jQuery 1.7.2 for extend.

https://github.com/jquery/jquery/blob/master/src/core.js

And I'm noticing the line:

if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy))

has to evaluate to true to do deep copying. copy is just part of the current object being copied.

But you aren't creating "plain" objects. You are creating objects generated by invoking a constructor with the new operator.

Now, in isPlainObject, it seems these lines have to be evaluated. (where hasOwn is hasOwn = Object.prototype.hasOwnProperty

try {
        // Not own constructor property must be Objectif ( obj.constructor &&
            !hasOwn.call(obj, "constructor") &&
            !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
            returnfalse;
        }
    } catch ( e ) {
        // IE8,9 Will throw exceptions on certain host objects #9897returnfalse;
    }

And there's where it concludes it's not a "plainObject".

This makes sense when you consider objects with a constructor probably ought to be created via that constructor or at least use some sort of "clone" method as you'd see in other languages/frameworks.

Post a Comment for "Why Does Jquery Extend Deep Copy Not Recursively Copy An Object?"