Uwaga: ja już przeszedł poniżej SO Pytania i 7 odpowiedzi (jak na razie) około Symbols, WeekMaps i Mapy, proszę przeczytać cały pytanie zanim głosowania: Private properties in JavaScript ES6 classes
artykułu: https://esdiscuss.org/topic/es7-property-initializersModyfikatory dostępu (private, protected) w ES6
Poniżej jest moje Simple Class
która zawiera prywatne, publiczne i chronione właściwości i metody.
'use strict';
class MyClass {
constructor() {
this.publicVar = 'This is Public Variable';
this.privateVar = 'This is Private Variable';
this.protectedVar = 'This is Protected Variable';
} // Public Constructor Method.
publicMethod() {
console.log(' Accessing this.publicVar: ', this.publicVar);
console.log(' Accessing this.privateVar: ', this.privateVar);
console.log(' Accessing this.protectedVar: ', this.protectedVar);
return 'Its Public Method'
} // Public Method.
privateMethod() {return 'Its Private Method'} // Private Method.
protectedMethod() {return 'Its Protected Method'} // Protected Method.
foo() {
this.publicMethod();
this.privateMethod();
this.protectedMethod();
} // Public Method
} // end class
mam instancji obiektu, oraz wywołanie metody publiczny, który działa zgodnie z oczekiwaniami.
let MyObject = new MyClass;
MyObject.foo(); // Works fine.
console.log(MyObject.publicVar); // Works
console.log(MyObject.publicMethod()); // Works
działa zgodnie z oczekiwaniami.
Teraz moje pytanie. Jestem świadomy, że kilka rzeczy, takich jak Symbol, znajduje się w specyfikacji ES6, jakie jest obecne obejście, aby uzyskać chronione i prywatne zmienne/metody działające na klasach ES6.
console.log(MyObject.privateVar); // Works
console.log(MyObject.privateMethod()); // Works
Chcę tę właściwość i sposób, aby były widoczne tylko w swojej własnej klasie.
console.log(MyObject.protectedVar); // Works
console.log(MyObject.protectedMethod()); // Works
Chcę tę właściwość i sposób, aby były widoczne w swojej klasie i wewnątrz klas rozszerzając go.
Obejście/lepszym rozwiązaniem, aby osiągnąć to zachowanie jest doceniana
Jeśli już czytałeś o Symbolach i Słabej Mapie, co jeszcze musisz wiedzieć? –
Przeszedłem przez te, ale oczekując przykładu jako odpowiedzi na ograniczenie i rozszerzenie zakresu klasy, –
Klasy ES6 nie mają prywatnych/chronionych umyślnie: [patrz tutaj] (http://stackoverflow.com/a/22158732/ 2509123) WeakMap/Symbols to więcej sposobów na dodanie ich do klas ES6, ale klasy ES6 są bardziej sposobem definiowania metod niż replikowanie "klasycznych" klas OO w językach takich jak Java i C# –