JavaScript 理解递归调用代码清理中的上下文,没有“with”关键字

javascript understanding context in recursive call code cleanup without "with" keyword

本文关键字:没有 关键字 上下文 with 递归 调用 代码 JavaScript      更新时间:2023-09-26

我正在尝试以以下方式在此处重新创建以下功能代码,而无需本文中指出的"with关键字"

function imports(from, as, exportInto) {
  exportInto = exportInto || {};
  var ctx = {
    exports: {},
    imports: function(from, as) {
      imports(from, as, ctx);
    }
  };
  from(ctx);
  exportInto[as] = ctx.exports;
};
var logger = (function(args) {
  args.exports = {
    print: function(res) {
      console.log(res);
    }
  }
});
var calculator = (function(args) {
  args.imports(logger, 'logger');
  args.exports = {
    add: function(a, b) {
      logger.print(a + b);
    }
  }
});
var app = (function(args) {
  args.imports(calculator, 'calculator');
  calculator.add(2, 3);
});
imports(app, 'app');

但是,在运行calculaltor.add函数时找不到,我试图调试问题,但我无法理解该错误。

编辑

此代码的目的是将以前的上下文导出返回到导入中。即args.imports(calculator, 'calculator');将被替换为

calculator.add = function(a, b) {
      logger.print(a + b);
    }

类似于我试图模仿的这条线

编辑 2

此外,此代码的目的是在单例文件结构中具有类似的结构。

function imports(from, as, exportInto) {
  exportInto = exportInto || {};
  var ctx = {
    exports: {},
    imports: function(from, as) {
      imports(from, as, ctx);
    }
  };
  from(ctx);
  exportInto[as] = ctx.exports;
};
var logger = (function(args) {
  args.exports = {
    print: function(res) {
      console.log(res);
    }
  }
});
var calculator = (function(args) {
  args.imports(logger, 'logger');
  args.exports = {
    add: function(a, b) {
      args.logger.print(a + b);
    }
  }
});
var app = (function(args) {
  args.imports(calculator, 'calculator');
  args.calculator.add(2, 3);
});
imports(app, 'app');