hsla() {
    if (this._hsla)
      return this._hsla;
    const r = this._rgba[0];
    const g = this._rgba[1];
    const b = this._rgba[2];
    const max = Math.max(r, g, b);
    const min = Math.min(r, g, b);
    const diff = max - min;
    const add = max + min;

    let h;
    if (min === max)
      h = 0;
    else if (r === max)
      h = ((1 / 6 * (g - b) / diff) + 1) % 1;
    else if (g === max)
      h = (1 / 6 * (b - r) / diff) + 1 / 3;
    else
      h = (1 / 6 * (r - g) / diff) + 2 / 3;

    const l = 0.5 * add;

    let s;
    if (l === 0)
      s = 0;
    else if (l === 1)
      s = 0;
    else if (l <= 0.5)
      s = diff / add;
    else
      s = diff / (2 - add);

    this._hsla = [h, s, l, this._rgba[3]];
    return this._hsla;
  }
@return {!Array.<number>} HSLA with components within [0..1]