Javascript 使用在单独文件中定义的构造函数模拟内部类

Javascript 使用在单独文件中定义的构造函数模拟内部类,javascript,oop,Javascript,Oop,我正在设计一个前端模块。由于在我的团队中熟悉OO风格的编程和.NET,我非常依赖构造函数,每个构造函数目前都在自己的文件和范围内 请参见以下示例设置 文件employee.js: (function(my) { "use strict"; my.Employee = function() { var self = this; self.name = "John Doe"; }; }(window["MyNamespace"])); (function(my) {

我正在设计一个前端模块。由于在我的团队中熟悉OO风格的编程和.NET,我非常依赖构造函数,每个构造函数目前都在自己的文件和范围内

请参见以下示例设置

文件
employee.js

(function(my) {
  "use strict";

  my.Employee = function() {
    var self = this;
    self.name = "John Doe";
  };
}(window["MyNamespace"]));
(function(my) {
  "use strict";

  my.Company = function(data) {
    var self = this, employees = [];

    self.name = data.name || "New company";

    self.spawnNewEmployee = function() {
      employees.push(new my.Employee());
    }    
  };
}(window["MyNamespace"]));
另一个文件
company.js

(function(my) {
  "use strict";

  my.Employee = function() {
    var self = this;
    self.name = "John Doe";
  };
}(window["MyNamespace"]));
(function(my) {
  "use strict";

  my.Company = function(data) {
    var self = this, employees = [];

    self.name = data.name || "New company";

    self.spawnNewEmployee = function() {
      employees.push(new my.Employee());
    }    
  };
}(window["MyNamespace"]));
重要提示:我的构建过程将把这些文件打包并缩小为最终文件。我推迟了决定使用哪种技术(这可能是我的实际问题,不确定)

问题是:
Employee
任何人都可以访问
窗口[“MyNamespace”]
,也就是任何脚本。但是,我想向模块外的消费者隐藏
员工
,同时保持从
公司
构造函数对其的访问


在C#或Java项目中,有
内部类是否有一种惯用的方法来使用JavaScript构造函数模拟内部类?还是应该依靠构建后步骤/捆绑+缩小工具来决定导出到全局命名空间的内容?或者我把东西完全混在一起了吗?

在JavaScript中“隐藏”东西的唯一方法是在闭包中捕获它们(即,一个公共父函数,它设置外部引用(或
返回
s)您希望在外部可见的变量。我认为您无法跨多个文件执行此操作。一个模块系统(如AMD、CommonJS或ES 6模块)这将是一个部分解决方案。您将无法使其完全不可访问,但默认情况下它不在全局范围内。否则,您将不得不在定义时将您的
员工
函数和您的
公司
函数置于同一个封闭范围内。@PaulS.和nils,这些指针的thx。您触发了m检查其他人是如何解决这个问题的,我发现了,例如(或者是吗?)。在JavaScript中“隐藏”东西的唯一方法是在闭包中捕获它们(例如,一个公共父函数,它设置对(或
return
s)的外部引用)您希望外部可见的变量。我认为您无法跨多个文件执行此操作。模块系统(如AMD、CommonJS或ES 6模块)这将是一个部分解决方案。您将无法使其完全不可访问,但默认情况下它不在全局范围内。否则,您将不得不在定义时将您的
员工
函数和您的
公司
函数置于同一个封闭范围内。@PaulS.和nils,这些指针的thx。您触发了me检查其他人是如何解决这个问题的,我发现例如(或者是吗?)。