javascript: заводская функция, которая вызывает другую заводскую функцию, которая вызывает другую

#javascript #factory-pattern

Вопрос:

У меня есть 2 заводские функции, которые возвращают методы внутри объекта:

 let midleware = function() {
  //error
  let _error = false;
  let _errorEmpty = 'Second arg must be [service/s]!';
  let _errorName = 'First arg must be the name (reference) for your service/s';
  //checks
  let _isArr = Array.isArray('arr');
  let _isFn = (typeof 'arr' == 'function');

  let fnsHolder = [];

  return {
    setToArray: function(arr) {
      if (_error) return;
      fnsHolder = (_isArr) ? arr : [arr];
      return fnsHolder
    },
    error: function(...args) {
      console.log('-------------false-----------')

    },
    checkType: function() {

    }
  }
}



let mid = midleware();

let container = function(midleware) {
  let _holder = new Map();

  let mid = Object.assign({}, midleware); // HOW TO CALL ANOTHER FACTORY INSIDE THIS ONE

  return {
    set: function(name, arr) {
      _holder.set(name, arr)
      console.log('set is Done!')
    },
    get: function(name) {
      return _holder.get(name)
    },
    size: function() {
      console.log(_holder.size);
      checker.error()
    },
    isExist: function(name) {
      return _holder.has(name)
    },
    remove: function(name) {
      _holder.delete(name)
      console.log('item has been Deleted!')
    },
    test: function() {
      mid.error()
    }
  }
}

let dim = container();
dim.test() //error 'undifined'

dim.set('hi', 'hello') //set is Done!
dim.isExist('hi') //true
 

Как вы можете видеть, я пытаюсь вызвать/вызвать первую фабрику внутри второй, и это выдает мне ошибку ..
итак, можно ли вызвать заводскую функцию внутри другой и внутри этой функции также вызвать другую?
потому что мне нужен только один, который контролирует все, а остальные похожи на скрытые слои

Комментарии:

1. mid внутри container() просто пустой объект. На нем нет никакого .test() метода. Если это должно исходить из параметра middleware , то вы не передаете никаких аргументов, let dim = container(); поэтому вам нужно это сделать. Если это должно прийти откуда-то еще, вам нужно это сделать.