Zugriffsmodifizierer (Private, Protected) in ES6

Anmerkung: ich habe schon ging durch die unten SO Frage, und 7 Antworten (wie jetzt) über Symbole, WeekMaps und Karten, Bitte Lesen Sie die vollständige Frage an, bevor Sie abstimmen: Private Eigenschaften in JavaScript-ES6-Klassen

Artikel: https://esdiscuss.org/topic/es7-property-initializers

Unten ist mein Simple Class enthält Private -, Public-und Protected-Eigenschaften und-Methoden.

JS:

  '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 bin der Instanziierung des Objekts und Aufruf der öffentlichen Methode, die funktioniert wie erwartet.

let MyObject = new MyClass;
MyObject.foo(); //Works fine.
console.log( MyObject.publicVar ); //Works
console.log( MyObject.publicMethod() ); //Works

Arbeiten wie erwartet.

Nun meine Frage. Ich bin mir bewusst, dass einige Dinge wie das Symbol in der ES6-Spezifikation, was ist der aktuelle workaround, um geschützte und private Variablen/Methoden arbeiten auf ES6-Klassen.

console.log( MyObject.privateVar ); //Works
console.log( MyObject.privateMethod() ); //Works

Möchte ich diese Eigenschaft und eine Methode zu sein, sichtbar nur in der eigenen Klasse.

console.log( MyObject.protectedVar ); //Works
console.log( MyObject.protectedMethod() ); //Works

Möchte ich diese Eigenschaft und eine Methode, um sichtbar zu werden in seiner eigenen Klasse und innerhalb der Klassen erweitern.

Workaround /bessere Lösung, um dieses Verhalten zu erzielen ist geschätzt

  • Wenn Sie bereits darüber Lesen, Symbole und WeakMap, was Sie sonst noch wissen müssen?
  • Ich habe durch diese aber erwarten die beispielsweise als Antwort zu beschränken und erweiterten Klasse-Bereich als gut
  • ES6-Klassen keine private/protected absichtlich: siehe hier WeakMap/Symbole ist mehr ein workaround, um Sie in ES6-Klassen, aber ES6-Klassen, das sind mehr eine Art und Weise zu definieren, die Methoden, als zu replizieren "classic" - OO-Klassen, in Sprachen wie Java und C#
Schreibe einen Kommentar