"use strict"; /** * @fileOverview This is base definition for all composed classes defined by the system * @module base * @requires base/chains * @requires dcl */ var dcl = require( "dcl" ); var chains = require( "./chains" ); /** * @classdesc The base of all classes in the system, this is one of the few pure "classes" in core the of the system. It is a * pretty clean little class whose primary purpose is to surface the composition chains and a basis for storing * options on mixin and subclass instances. Options are handled at the instance rather than the prototype level * so that multiple instances don't compete for default values. * * @exports base * @constructor * @extends base/chains */ var Base = dcl( [chains], /** @lends base# */{ declaredClass : "Base", /** * Add an option to a class. If any members of the hash already exist in `this.options`, they will be overwritten. * @param {hash} options A hash of options you want to set * @see {base#addDefaultOptions} */ addOptions : function ( options ) { options = options || {}; if ( this.options ) {options = sys.extend( {}, sys.result( this, 'options' ), options );} this.options = options; }, /** * Add a default option to a class. The default options are only set if there is not already a * value for the option. * @param {hash} options A hash of options you want to set * @see {base#addOptions} */ addDefaultOptions : function ( options ) { options = options || {}; if ( this.options ) {options = sys.defaults( {}, sys.result( this, 'options' ), options );} this.options = options; }, /** * Call this to close your object and dispose of all maintained resources. You can define this method on your * own classes without having to call the superclass instance, however it is reccomended that you put * all disposal code in `destroy()`. You must be disciplined about calling this on your instances. * @see {base/chains#end} * @see {base/chains#destroy} */ end : function () { this.destroy() }, /** * Called when it is time to get rid of all of your instance level references and objects and events. You can * define this method on your own classes without having to call the superclass instance. It is called by * `instance.end()` automatically * @see {base/chains#end} * @see {base/chains#destroy} */ destroy : function () { } } ); Base.compose = dcl; Base.mixin = dcl.mix; module.exports = Base;