// This class isn't good for much on its own. But it does define a // generic toString( ) method that may be of interest to other classes. function GenericToString( ) {} GenericToString.prototype.toString = function( ) { var props = []; for(var name in this) { if (!this.hasOwnProperty(name)) continue; var value = this[name]; var s = name + ":" switch(typeof value) { case 'function': s += "function"; break; case 'object': if (value instanceof Array) s += "array" else s += value.toString( ); break; default: s += String(value); break; } props.push(s); } return "{" + props.join(", ") + "}"; } // This mixin class defines an equals( ) method that can compare // simple objects for equality. function GenericEquals( ) {} GenericEquals.prototype.equals = function(that) { if (this == that) return true; // this and that are equal only if this has all the properties of // that and doesn't have any additional properties // Note that we don't do deep comparison. Property values // must be === to each other. So properties that refer to objects // must refer to the same object, not objects that are equals( ) var propsInThat = 0; for(var name in that) { propsInThat++; if (this[name] !== that[name]) return false; } // Now make sure that this object doesn't have additional props var propsInThis = 0; for(name in this) propsInThis++; // If this has additional properties, then they are not equal if (propsInThis != propsInThat) return false; // The two objects appear to be equal. return true; }