Commit 990d9ca1 authored by Robert Katic's avatar Robert Katic Committed by John Resig

Made isObjectLiteral to work correctly with custom objects with empty prototypes.

parent 1ce92e02
...@@ -328,13 +328,20 @@ jQuery.extend({ ...@@ -328,13 +328,20 @@ jQuery.extend({
return false; 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, //own properties are iterated firstly,
//so to speed up, we can test last one if it is own or not //so to speed up, we can test last one if it is own or not
var key; var key;
for ( key in obj ) {} for ( key in obj ) {}
return !key || hasOwnProperty.call( obj, key ); return key === undefined || hasOwnProperty.call( obj, key );
}, },
isEmptyObject: function( obj ) { isEmptyObject: function( obj ) {
......
...@@ -553,10 +553,14 @@ test("jQuery.extend(Object, Object)", function() { ...@@ -553,10 +553,14 @@ test("jQuery.extend(Object, Object)", function() {
same( empty.foo, optionsWithDate.foo, "Dates copy correctly" ); same( empty.foo, optionsWithDate.foo, "Dates copy correctly" );
var myKlass = function() {}; 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 // Makes the class a little more realistic
myKlass.prototype = { someMethod: function(){} }; myKlass.prototype = { someMethod: function(){} };
empty = {}; empty = {};
var optionsWithCustomObject = { foo: { date: new myKlass } };
jQuery.extend(true, empty, optionsWithCustomObject); jQuery.extend(true, empty, optionsWithCustomObject);
same( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly" ); same( empty.foo, optionsWithCustomObject.foo, "Custom objects copy correctly" );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment