javascript - 无法从 javascript 命名空间调用 'private' 方法?

标签 javascript javascript-namespaces

我试图了解如何在 javascript 中按文件分解功能。我试图将 namespace 视为单例类。我不明白为什么在下面的代码中,MODULE_A.privateMethod1() 会抛出错误:Uncaught TypeError: undefined is not a function。当我打开记录的对象时,我也看不到那里的私有(private)方法。

index.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Test Project</title>

    <script src="index.js"></script>
    <script src="moduleA.js"></script>
  </head>
    <body>
      <div>
        hi
      </div>
  </body>
</html>

index.js:

(function() {

  var initializeWindow = function() {
    console.log("initializeWindow");
    MODULE_A.publicMethod1();
  };

  window.addEventListener('load', initializeWindow);
})();

moduleA.js:

// "Singleton Class"
var MODULE_A = (function() {
  // ---------------------------------------------------------------------------
  // "Private" Class Constants
  // ---------------------------------------------------------------------------
  var A_CONSTANT_NUMBER = 1;

  // ---------------------------------------------------------------------------
  // "Private" Class Variables (Properties)
  // ---------------------------------------------------------------------------
  var myPrivateVar_ = 2;

  // ---------------------------------------------------------------------------
  // "Private" Methods
  // ---------------------------------------------------------------------------
  var privateMethod1 = function() {
    console.log("A.privateMethod1");
  };

  var privateMethod2 = function() {
    console.log("A.privateMethod2");
  };

  return {
    // ---------------------------------------------------------------------------
    // "Public" Class Variables (Properties)
    // ---------------------------------------------------------------------------
    aPublicVar1: 3,

    // ---------------------------------------------------------------------------
    // "Public" Methods
    // ---------------------------------------------------------------------------
    publicMethod1: function() {
      console.log("A.publicMethod1");
      this.publicMethod2();
      // ERROR HERE!!!
      this.privateMethod1();
      this.privateMethod2();
    },

    publicMethod2: function() {
      console.log("A.publicMethod2");
    }
  }
})();

enter image description here

最佳答案

解决方案是以下两种之一:

当你用 var 声明一些东西时,它不能用 this 访问

要么:

this.privateMethod1 = function() {
console.log("A.privateMethod1");
};

 publicMethod1: function() {
  console.log("B.publicMethod1");
  this.publicMethod2();
  privateMethod1();
  privateMethod2();
},

编辑:如果你想私有(private)方法,你应该遵循method2,你可以去this site以获得更多解释。

关于javascript - 无法从 javascript 命名空间调用 'private' 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132655/

相关文章:

javascript - 验证日期选择器不输入旧日期

javascript - 使用sort按偏好排序?

使用 || 的 Javascript 命名空间

javascript - 为来自外部站点的图像回退 img src

javascript - 为什么 setState throw 对象作为 React 子对象无效?

javascript - 文件上传阻止更大的文件

javascript - 如何在 JS 中独立于上下文(浏览器、节点)分配读取根变量?

Javascript 命名空间 - 函数之间的变量交换

javascript - 命名空间动态加载的 javascript 文件的内容