addFolder(name, alphabetical) {
        // We have to prevent collisions on names in order to have a key
        // by which to remember saved values
        if (this.__folders[name] !== undefined) {
          throw new Error('You already have a folder in this GUI by the'
                + ` name "${name}"`);
        }

        const new_gui_params = { name, parent: this };

        // We need to pass down the autoPlace trait so that we can
        // attach event listeners to open/close folder actions to
        // ensure that a scrollbar appears if the window is too short.
        new_gui_params.autoPlace = this.autoPlace;

        // Do we have saved appearance data for this folder?

        if (this.load // Anything loaded?
              && this.load.folders // Was my parent a dead-end?
              && this.load.folders[name]) { // Did daddy remember me?
          // Start me closed if I was closed
          new_gui_params.closed = this.load.folders[name].closed;

          // Pass down the loaded data
          new_gui_params.load = this.load.folders[name];
        }

        const gui = new GUI(new_gui_params);
        gui.__alphabetical = alphabetical || false;
        this.__folders[name] = gui;

        const li = addRow(this, gui.domElement);
        dom.addClass(li, 'folder');
        return gui;
      }
@param name
@param [alphabetical=false] whether to sort folder alphabetically
@returns {dat.gui.GUI} The new folder.
@throws {Error} if this GUI already has a folder by the specified
name
@instance