code: function(attrs, options) {
  
        // Extract attributes and options.
        options || (options = {});
        if (!attrs) return this;
        if (attrs.attributes) attrs = attrs.attributes;
        var now = this.attributes, escaped = this._escapedAttributes;
  
        // Run validation.
        if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
  
        // Check for changes of `id`.
        if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];
  
        // We're about to start triggering change events.
        var alreadyChanging = this._changing;
        this._changing = true;
  
        // Update attributes.
        for (var attr in attrs) {
          var val = attrs[attr];
          if (!_.isEqual(now[attr], val)) {
            now[attr] = val;
            delete escaped[attr];
            this._changed = true;
            if (!options.silent) this.trigger('change:' + attr, this, val, options);
          }
        }
  
        // Fire the `"change"` event, if the model has been changed.
        if (!alreadyChanging && !options.silent && this._changed) this.change(options);
        this._changing = false;
        return this;
      }
docs: Set a hash of model attributes on the object, firing `"change"` unless you choose to silence it.