static calculates(calcField, fnCompute) {

    if (!this.prototype.hasOwnProperty('_calculations')) {
      this.prototype._calculations = {};
      this.prototype._calculationsList = [];
    }

    if (this.prototype._calculations[calcField]) {
      throw new Error(`Calculated field "${calcField}" for "${this.name}" already exists!`);
    }

    let columnLookup = this.columnLookup();

    if (columnLookup[calcField]) {
      throw new Error(`Cannot create calculated field "${calcField}" for "${this.name}", field already exists.`);
    }

    let fields = utilities.getFunctionParameters(fnCompute);

    fields.forEach(f => {
      if (!columnLookup[f]) {
        throw new Error(`Calculation function error: "${calcField} for "${this.name}" using field "${f}", "${f}" does not exist.`)
      }
    });

    this.prototype._calculations[calcField] = {
      calculate: fnCompute,
      fields: fields
    };

    this.prototype._calculationsList.push(calcField);

  }
Create a calculated field (in JavaScript). Must be synchronous.
@param {string} calcField The name of the calculated field
@param {function} fnCalculate The synchronous method to perform a calculation for.
  Pass the names of the (non-computed) fields you'd like to use as parameters.