jQuery.extend(true, Object, Object) copies objects with length keys correctly
[jquery.git] / src / core.js
index cab3b54..6f8d40f 100644 (file)
@@ -12,6 +12,9 @@ var jQuery = function( selector, context ) {
        // Map over the $ in case of overwrite
        _$ = window.$,
 
+       // Use the correct document accordingly with window argument (sandbox)
+       document = window.document,
+
        // A central reference to the root jQuery(document)
        rootjQuery,
 
@@ -119,16 +122,18 @@ jQuery.fn = jQuery.prototype = {
                return this.length;
        },
 
+       toArray: Array.prototype.slice,
+
        // Get the Nth element in the matched element set OR
        // Get the whole matched element set as a clean array
        get: function( num ) {
                return num == null ?
 
                        // Return a 'clean' array
-                       Array.prototype.slice.call( this ) :
+                       this.toArray() :
 
                        // Return just the object
-                       this[ num ];
+                       ( num < 0 ? this.toArray.call(this, num)[0] : this[ num ] );
        },
 
        // Take an array of elements and push it onto the stack
@@ -240,7 +245,7 @@ jQuery.extend = jQuery.fn.extend = function() {
                                if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
                                        target[ name ] = jQuery.extend( deep,
                                                // Never move original objects, clone them
-                                               src || ( copy.length != null ? [ ] : { } ), copy );
+                                               src || ( jQuery.isArray(copy) ? [ ] : { } ), copy );
 
                                // Don't bring in undefined values
                                } else if ( copy !== undefined ) {
@@ -310,7 +315,7 @@ jQuery.extend({
 
        // args is for internal usage only
        each: function( object, callback, args ) {
-               var name, i = 0, 
+               var name, i = 0,
                        length = object.length,
                        isObj = length === undefined || jQuery.isFunction(object);