Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Made isObjectLiteral to work correctly with custom objects with empty…

… prototypes.
  • Loading branch information...
commit 990d9ca1b05a587cce7599a1a40aa2558117db41 1 parent 1ce92e0
@rkatic rkatic authored jeresig committed
Showing with 14 additions and 3 deletions.
  1. +9 −2 src/core.js
  2. +5 −1 test/unit/core.js
View
11 src/core.js
@@ -328,13 +328,20 @@ jQuery.extend({
return false;
}
+ // not own constructor property must be Object
+ if ( obj.constructor
+ && !hasOwnProperty.call(obj, "constructor")
+ && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+
//own properties are iterated firstly,
//so to speed up, we can test last one if it is own or not
-
+
var key;
for ( key in obj ) {}
- return !key || hasOwnProperty.call( obj, key );
+ return key === undefined || hasOwnProperty.call( obj, key );
},
isEmptyObject: function( obj ) {
View
6 test/unit/core.js
@@ -553,10 +553,14 @@ test("jQuery.extend(Object, Object)", function() {
same( empty.foo, optionsWithDate.foo, "Dates copy correctly" );
var myKlass = function() {};
+ var optionsWithCustomObject = { foo: { date: new myKlass } };
+ empty = {};
+ jQuery.extend(true, empty, optionsWithCustomObject);
+ same( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly (no methods)" );
+
// Makes the class a little more realistic
myKlass.prototype = { someMethod: function(){} };
empty = {};
- var optionsWithCustomObject = { foo: { date: new myKlass } };
jQuery.extend(true, empty, optionsWithCustomObject);
same( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly" );
Please sign in to comment.
Something went wrong with that request. Please try again.