docs: function(id) {
          var comps,
              compName,
              comp,
              c = 0;
  
          //add multiple arguments
          if (arguments.length === 1 && id.indexOf(",") !== -1) {
              comps = id.split(rlist);
          } else {
              comps = arguments;
          }
  
          //extend the components
          for (; c < comps.length; c++) {
              compName = comps[c];
  
              // If component already exists, continue
              if (this.__c[compName] === true) {
                  continue;
              }
              this.__c[compName] = true;
              // update map from component to (entityId -> entity)
              (compEntities[compName] = compEntities[compName] || {})[
                  this[0]
              ] = this;
  
              comp = components[compName];
              // Copy all methods of the component
              this.extend(comp);
              // Add any required components
              if (comp && "required" in comp) {
                  this.requires(comp.required);
              }
              // Define properties
              if (comp && "properties" in comp) {
                  var props = comp.properties;
                  for (var propertyName in props) {
                      Object.defineProperty(
                          this,
                          propertyName,
                          props[propertyName]
                      );
                  }
              }
              // Bind events
              if (comp && "events" in comp) {
                  var auto = comp.events;
                  for (var eventName in auto) {
                      var fn =
                          typeof auto[eventName] === "function"
                              ? auto[eventName]
                              : comp[auto[eventName]];
                      this.bind(eventName, fn);
                  }
              }
              // Call constructor function
              if (comp && "init" in comp) {
                  comp.init.call(this);
              }
          }
  
          this.trigger("NewComponent", comps);
          return this;
      }