Nota: ho già passato attraverso il sotto SO Domanda e 7 Risposte (a partire da ora) circa Symbols, WeekMaps e mappe, Si prega di leggere l'intero domanda prima di votare: Private properties in JavaScript ES6 classes
articolo: https://esdiscuss.org/topic/es7-property-initializersmodificatori di accesso (Private, Protected) in ES6
Qui di seguito è la mia Simple Class
che contiene proprietà private, pubbliche e protette e metodi.
'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
che sto un'istanza dell'oggetto e chiamando il metodo pubblico che sta funzionando come previsto.
let MyObject = new MyClass;
MyObject.foo(); // Works fine.
console.log(MyObject.publicVar); // Works
console.log(MyObject.publicMethod()); // Works
funziona come previsto.
Ora la mia domanda. Sono consapevole che alcune cose come Symbol sono nella specifica ES6, qual è l'attuale soluzione per ottenere variabili e metodi privati protetti su classi ES6.
console.log(MyObject.privateVar); // Works
console.log(MyObject.privateMethod()); // Works
voglio questa proprietà e metodo per essere visibili solo nella propria classe.
console.log(MyObject.protectedVar); // Works
console.log(MyObject.protectedMethod()); // Works
voglio questa proprietà e metodo per essere visibile nella sua classe e le classi all'interno di estenderlo.
Soluzione/soluzione migliore per raggiungere questo comportamento è apprezzato
Se hai già letto su Simboli e WeakMap, cos'altro hai bisogno di sapere? –
Sono passati da quelli, ma mi aspettavo che l'esempio fosse una risposta per limitare ed estendere l'ambito di classe pure –
Le classi ES6 non hanno intenzionalmente privato/protetto: [vedi qui] (http://stackoverflow.com/a/22158732/ 2509123) WeakMap/Symbols è più di una soluzione alternativa per aggiungerli nelle classi ES6, ma le classi ES6 sono più di un modo per definire metodi, piuttosto che replicare classi OO "classiche" in linguaggi come Java e C# –