1717 */
1818// Extend Base with utility functions used across the library. Also set
1919// this.Base on the injection scope, since straps.js ommits that.
20- this . Base = Base . inject ( /** @lends Base# */ {
20+ Base . inject ( /** @lends Base# */ {
2121 // Have generics versions of #clone() and #toString():
2222 generics : true ,
2323
@@ -36,7 +36,7 @@ this.Base = Base.inject(/** @lends Base# */{
3636 */
3737 toString : function ( ) {
3838 return this . _id != null
39- ? ( this . _class || 'Object' ) + ( this . _name
39+ ? ( this . constructor . name || 'Object' ) + ( this . _name
4040 ? " '" + this . _name + "'"
4141 : ' @' + this . _id )
4242 : '{ ' + Base . each ( this , function ( value , key ) {
@@ -80,15 +80,18 @@ this.Base = Base.inject(/** @lends Base# */{
8080
8181 statics : /** @lends Base */ {
8282
83- _classes : { } ,
83+ // Keep track of all named classes for serialization and exporting.
84+ // Also register the Base class itself.
85+ _classes : { 'Base' : Base } ,
8486
8587 extend : function extend ( src ) {
8688 // Override Base.extend() with a version that registers classes that
8789 // define #_class inside the Base._classes lookup, for
8890 // deserialization.
89- var res = extend . base . apply ( this , arguments ) ;
90- if ( src . _class )
91- Base . _classes [ src . _class ] = res ;
91+ var res = extend . base . apply ( this , arguments ) ,
92+ name = res . name ;
93+ if ( name )
94+ Base . _classes [ name ] = res ;
9295 return res ;
9396 } ,
9497
@@ -289,11 +292,12 @@ this.Base = Base.inject(/** @lends Base# */{
289292 ref = this . references [ id ] ;
290293 if ( ! ref ) {
291294 this . length ++ ;
292- var res = create . call ( item ) ;
295+ var res = create . call ( item ) ,
296+ name = item . constructor . name ;
293297 // Also automatically insert class for dictionary
294298 // entries.
295- if ( item . _class && res [ 0 ] !== item . _class )
296- res . unshift ( item . _class ) ;
299+ if ( name && res [ 0 ] !== name )
300+ res . unshift ( name ) ;
297301 this . definitions [ id ] = res ;
298302 ref = this . references [ id ] = [ id ] ;
299303 }
@@ -306,8 +310,9 @@ this.Base = Base.inject(/** @lends Base# */{
306310 // If we don't serialize to compact form (meaning no type
307311 // identifier), see if _serialize didn't already add the class,
308312 // e.g. for classes that do not support compact form.
309- if ( obj . _class && ! compact && res [ 0 ] !== obj . _class )
310- res . unshift ( obj . _class ) ;
313+ var name = obj . constructor . name ;
314+ if ( name && ! compact && res [ 0 ] !== name )
315+ res . unshift ( name ) ;
311316 } else if ( Array . isArray ( obj ) ) {
312317 res = [ ] ;
313318 for ( var i = 0 , l = obj . length ; i < l ; i ++ )
0 commit comments