Hinweis: Ich ging bereits durch die unter SO Frage und 7 Antworten (ab sofort) über Symbols, WeekMaps und Karten, lesen Sie bitte die volle Frage bevor Sie wählen: Private properties in JavaScript ES6 classes
Artikel: https://esdiscuss.org/topic/es7-property-initializersZugriffsmodifizierer (Private, Protected) in ES6
Unten ist mein Simple Class
die privaten, öffentlichen und geschützten Eigenschaften und Methoden enthält.
'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
ich das Objekt zu erhalten und die öffentliche Methode aufrufen, die wie erwartet funktioniert.
let MyObject = new MyClass;
MyObject.foo(); // Works fine.
console.log(MyObject.publicVar); // Works
console.log(MyObject.publicMethod()); // Works
wie erwartet.
Jetzt meine Frage. Ich bin mir bewusst, dass einige Dinge wie Symbol in der ES6-Spezifikation sind, was ist die aktuelle Problemumgehung, um geschützt zu werden und private Variablen/Methoden, die an ES6-Klassen arbeiten.
console.log(MyObject.privateVar); // Works
console.log(MyObject.privateMethod()); // Works
Ich möchte diese Eigenschaft und Methode sichtbar ist nur in seiner eigenen Klasse.
console.log(MyObject.protectedVar); // Works
console.log(MyObject.protectedMethod()); // Works
Ich mag diese Eigenschaft und Methode in seiner eigenen Klasse und innerhalb von Klassen sichtbar sein, es erstreckt.
Problemumgehung/bessere Lösung dieses Verhalten zu erreichen, sehr geschätzt wird
Wenn Sie bereits über Symbole und WeakMap gelesen haben, was müssen Sie sonst noch wissen? –
Ich bin durch diese gegangen, aber erwarte das Beispiel als eine Antwort zu beschränken und erweiterten Klassenbereich sowie –
ES6 Klassen haben nicht privat/geschützt absichtlich: [siehe hier] (http://stackoverflow.com/a/22158732/ 2509123) WeakMap/Symbols ist eher eine Problemumgehung, um sie zu ES6-Klassen hinzuzufügen, aber ES6-Klassen sind eher eine Methode zum Definieren von Methoden, als "klassische" OO-Klassen in Sprachen wie Java und C# zu replizieren. –