code: function() {
          var data, silent, recursive;
          if (typeof arguments[0] === "string") {
              data = this._set_create_object(arguments[0], arguments[1]);
              silent = !!arguments[2];
              recursive = arguments[3] || arguments[0].indexOf(".") > -1;
          } else {
              data = arguments[0];
              silent = !!arguments[1];
              recursive = !!arguments[2];
          }
  
          if (!silent) {
              this.trigger("Change", data);
          }
  
          if (recursive) {
              this._recursive_extend(data, this);
          } else {
              this.extend.call(this, data);
          }
          return this;
      }
docs: Internal setter method for attributes on the component. Called by `.attr`.
  
  Options:
  
  `silent`: If you want to prevent it from firing events.
  
  `recursive`: If you pass in an object you could overwrite
  sibling keys, this recursively merges instead of just
  merging it. This is `false` by default, unless you are
  using dot notation `name.first`.
  
  example
  ~~~
  person._attr_set('name', 'Foxxy', true);
  person._attr_set('name', 'Foxxy');
  person._attr_set({name: 'Foxxy'}, true);
  person._attr_set({name: 'Foxxy'});
  person._attr_set('name.first', 'Foxxy');
  ~~~