簡體   English   中英

無法從javascript命名空間調用'private'方法?

[英]Unable to call 'private' method from javascript namespace?

我試圖了解如何通過javascript文件分解功能。 我試圖將名稱空間視為單例類。 我不明白為什么在下面的代碼中, MODULE_A.privateMethod1()拋出錯誤: Uncaught TypeError: undefined is not a function 當我打開記錄的對象時,我也看不到私有方法。

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");
    }
  }
})();

在此輸入圖像描述

解決方案是兩者之一:

當您使用var聲明某些內容時,無法使用this方法訪問this

要么:

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

要么

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

編輯:如果您希望該方法為私有方法,則應遵循方法2,您可以訪問此網站以獲取更多說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM