2016年12月14日 星期三

在 nodejs 使用 class

How to add private member and privileged member to your class

Google Doc: This Document
GitHub: Download
很多人都已經知道 JavaScript ES6 的規範裡面, 你已經可以使用 class 了. 這份文件是寫給我自己備忘用的. 內容包含
  1. 如何定義 class
  2. 如何定義 public method 以及 variable
  3. 如何定義 private method 以及 variable
  4. 如何定義 privileged method 來存取 private members
  5. 如何在外面呼叫 privileged method

重要規則

  1. PrivatePrivileged member 只能在建構子裡面定義
  2. Private method 只能被存取 Private members, 你不能在 Public method 中, 存取 任何 Private 成員
  3. 你可以使用 Privileged method 呼叫 Private/Public 成員. 另外, Privileged method 也可以被 outside 以及 Public method 呼叫.

細節


class TestClass {

 // 建構子
 constructor(){
   // 定義 public variable
   this.myPublicVariable = 123;

   // 定義 private variable
   let myPrivateVariable = 123;    

   // 定義 private method
   function myPrivateMethod1(){
       myPrivateVariable = 567; //OK:  ONLY private method can access your private variable
   }
   
   // 定義 private method: 測試只能用 private method 存取 private members
   function myPrivateMethod2(){
       myPrivateMethod1();     // OK: you can access your private method from any private method
   }

   // 定義 privileged method: 特權 method
   //  ==> 可以存取 private/public method, 也可以被外面呼叫
   this.myPrivilegedMethod = function () {
      console.log("myPrivilegedMethod");

      // 存取 public method 測試
      this.publicMethod2();          // OK: You can access any public/private members

      // 存取 private method 測試
      myPrivateMethod1();           // OK: You can access any public/private members
   };
 }

 // 定義 public method
 publicMethod(){
   console.log("public Method");
   // 你不能在 public method 中, 存取 任何 private 成員
   // myPrivateVariable = 567; // Error: you cannot access the private variable in public method
   // myPrivateMethod1();        // Error: You cannot access private method in public method

   // 當然, 你可以存取 public 成員
   this.myPublicVariable = 567;     // OK: You can access public variable in public method

   // 你也可以存取 priviledged  method
   this.myPrivilegedMethod();     // OK: You can access any priviledged method from public method
 }

 publicMethod2(){
   console.log("public Method 2");
 }

}



Usage


// Test public member TestClass
let myTest1 = new TestClass();

// 存取 public method example
myTest1.publicMethod();               // OK: You can access any public method from outside.

// 在外面, 當然不能存取 private method
// myTest1.privateMethod1();       // Error: You cannot access private method from outside.

// 在外面, 可以存取 priviledged method
myTest1.myPrivilegedMethod(); // OK: You can access "privilegedMethod" from outside.



Reference


其他相關文章

  • [class, definition] How to define a class (view)
  • [class, member variable] How to add an new public member variable to your object (view)