Update $.data to use a function instead of an object when attaching to JS objects...
[jquery.git] / src / data.js
index 21f0e3a..faa44f3 100644 (file)
@@ -63,12 +63,14 @@ jQuery.extend({
                }
 
                if ( !cache[ id ] ) {
-                       cache[ id ] = {};
+                       // Use a Function as the cache object instead of an Object on JS objects
+                       // as a hack to prevent JSON.stringify from serializing it (#8108)
+                       cache[ id ] = isNode ? {} : function () {};
                }
 
                // An object can be passed to jQuery.data instead of a key/value pair; this gets
                // shallow copied over onto the existing cache
-               if ( typeof name === "object" ) {
+               if ( typeof name === "object" || typeof name === "function" ) {
                        if ( pvt ) {
                                cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
                        } else {