docs: function (attributes, evaluateBindingsInCtor) {
                      bindingCreator = bindingCreator || new BindingCreator();
  
                      this.$eventBindables = [];
                      this.$bindings = {};
                      this.$bindingCreator = bindingCreator;
  
                      // call the base class constructor
                      this.callBase(null);
  
                      this.$ = {};
                      this.$injected = {};
                      this.$bindingAttributes = {};
  
                      this.$invalidatedProperties = {};
                      this.$invalidated = false;
  
                      _.extend(this._eventAttributes, this.base._eventAttributes || {});
  
                      attributes = attributes || {};
  
                      var defaultAttributes = this._defaultAttributes(),
                          defaultAttribute;
  
                      var nonBindings = {};
  
                      if (!evaluateBindingsInCtor) {
                          for (var k in attributes) {
                              if (attributes.hasOwnProperty(k)) {
                                  if (_.isString(attributes[k])) {
                                      bindingDefinitions = bindingCreator.parse(attributes[k]);
  
                                      if (bindingCreator.containsBindingDefinition(bindingDefinitions)) {
                                          // we found an attribute containing a binding definition
                                          nonBindings[k] = true;
                                      }
                                  }
                              }
                          }
  
                      }
  
                      for (var key in defaultAttributes) {
                          if (defaultAttributes.hasOwnProperty(key)) {
                              defaultAttribute = defaultAttributes[key];
                              if (!attributes.hasOwnProperty(key)) {
                                  if (_.isFunction(defaultAttribute)) {
                                      // Function as default -> construct new Object
                                      attributes[key] = new (defaultAttribute)();
                                  } else {
                                      // RegExp should not be cloned!
                                      if (defaultAttributes[key] instanceof RegExp) {
                                          attributes[key] = defaultAttribute;
                                      } else {
                                          attributes[key] = _.clone(defaultAttribute);
                                      }
                                  }
                              }
                          }
                      }
  
                      this.$ = attributes;
  
                      var $ = this.$,
                          bindingAttributes = this.$bindingAttributes,
                          bindingDefinitions,
                          value;
  
                      // we need to find out all attributes which contains binding definitions and set
                      // the corresponding $[key] to null -> than evaluate the bindings
                      // this is because some function bindings belong on other binding values which are
                      // at the time of evaluation maybe unresolved and for example {foo.bar} instead of a value
                      for (key in $) {
                          if ($.hasOwnProperty(key) && !nonBindings.hasOwnProperty(key)) {
                              value = $[key];
                              bindingDefinitions = bindingCreator.parse(value);
  
                              if (bindingCreator.containsBindingDefinition(bindingDefinitions)) {
                                  // we found an attribute containing a binding definition
                                  bindingAttributes[key] = {
                                      bindingDefinitions: bindingDefinitions,
                                      value: value
                                  };
  
                                  $[key] = null;
                              }
                          }
                      }
  
  
                      this.$previousAttributes = {};
  
                      this._initializeFromCtor();
                  }