Was there a specific reason to do this lazily? I'd strongly prefer that the modal is set on construction:

    this.modal = opts.modal || this._createModal();