How to add private member and privileged member to your class
Jing, mqjing@gmail.com
Google Doc: This Document
GitHub: Download
很多人都已經知道 JavaScript ES6 的規範裡面, 你已經可以使用 class 了. 這份文件是寫給我自己備忘用的. 內容包含
- 如何定義 class
- 如何定義 public method 以及 variable
- 如何定義 private method 以及 variable
- 如何定義 privileged method 來存取 private members
- 如何在外面呼叫 privileged method
重要規則
- Private 和 Privileged member 只能在建構子裡面定義
- Private method 只能被存取 Private members, 你不能在 Public method 中, 存取 任何 Private 成員
- 你可以使用 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.
|