toObject(arrInterface) {

    let obj = {};

    arrInterface = arrInterface ||
      this.fieldList()
      .concat(this._calculationsList)
      .filter(key => !this._hides[key]);

    arrInterface.forEach(key => {

      if (this._hides[key]) {
        return;
      }

      let joinObject;

      if (typeof key === 'object' && key !== null) {
        let subInterface = key;
        key = Object.keys(key)[0];
        joinObject = this._joinsCache[key];
        joinObject && (obj[key] = joinObject.toObject(subInterface[key]));
      } else if (this._data[key] !== undefined) {
        obj[key] = this._data[key];
      } else if (this._calculations[key] !== undefined) {
        obj[key] = this.calculate(key);
      } else if (joinObject = this._joinsCache[key]) {
        obj[key] = joinObject.toObject();
      }

    });

    return obj;

  }
Creates a plain object from the Model, with properties matching an optional interface
@param {Array} arrInterface Interface to use for object creation