code: function onSetAttrChange(e) {
          var self = this, method;    // ignore bubbling
          // ignore bubbling
          if (e.target === self) {
              method = self[ON_SET + e.type.slice(5).slice(0, -6)];
              method.call(self, e.newVal, e);
          }
      }
docs: The default set of attributes which will be available for instances of this class, and
  their configuration
  
  By default if the value is an object literal or an array it will be 'shallow' cloned, to
  protect the default value.
  
  for example:
  @example
  {
  x:{
  value: // default value
  valueFn: // default function to get value
  getter: // getter function
  setter: // setter function
  }
  }
  
  @property ATTRS
  @member KISSY.Base
  @static
  @type {Object}
   
  The default set of attributes which will be available for instances of this class, and
  their configuration
  
  By default if the value is an object literal or an array it will be 'shallow' cloned, to
  protect the default value.
  
  for example:
  @example
  {
  x:{
  value: // default value
  valueFn: // default function to get value
  getter: // getter function
  setter: // setter function
  }
  }
  
  @property ATTRS
  @member KISSY.Base
  @static
  @type {Object}