add(a1, a2) {
    if (isFnc(a1)) {
      const constructor = /** @type {contructorCallback} */(a1);
      this.constructors.push(constructor);
      this.execute(() => {
        const revertConstructor = constructor(this);
        if (revertConstructor) {
          this.revertConstructors.push(revertConstructor);
        }
      });
    } else {
      this.methods[/** @type {String} */(a1)] = (/** @type {any} */...args) => this.execute(() => a2(...args));
    }
    return this;
  }
@callback contructorCallback
@param {this} self

@overload
@param {String} a1
@param {ScopeMethod} a2
@return {this}

@overload
@param {contructorCallback} a1
@return {this}

@param {String|contructorCallback} a1
@param {ScopeMethod} [a2]