Примечание: Я уже прошел через ниже SO Вопросы и 7 ответов (как сейчас) о Symbols, WeekMaps и Карты, пожалуйста, прочитайте полный вопрос, прежде чем голосовать: Private properties in JavaScript ES6 classes
Статья: https://esdiscuss.org/topic/es7-property-initializersМодификаторы доступа (Private, Protected) в ES6
Ниже мой Simple Class
, который содержит частные, государственные и защищенные свойства и методы.
'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
Я экземпляра объекта и вызов открытый метод, который работает, как ожидалось.
let MyObject = new MyClass;
MyObject.foo(); // Works fine.
console.log(MyObject.publicVar); // Works
console.log(MyObject.publicMethod()); // Works
работает, как ожидалось.
Теперь мой вопрос. Я знаю, что в спецификации ES6 есть несколько таких вещей, как Symbol, каков текущий обходной путь для защиты и частные переменные/методы, работающие над классами ES6.
console.log(MyObject.privateVar); // Works
console.log(MyObject.privateMethod()); // Works
Я хочу, чтобы это свойство и метод, чтобы быть видимыми только в своем классе.
console.log(MyObject.protectedVar); // Works
console.log(MyObject.protectedMethod()); // Works
Я хочу, чтобы это свойство и метод, чтобы быть видимыми в своем классе и внутри классах, проходящих его.
Обхода лучшего решения/для достижения такого поведения ценятся
Если вы уже читали о Символах и WeakMap, что еще вам нужно знать? –
Я прошел через те, но ожидал, что пример будет ответом на ограничение и расширенный класс. –
ES6 классы не имеют конфиденциального/защищенного намеренно: [см. Здесь] (http://stackoverflow.com/a/22158732/ 2509123) WeakMap/Symbols является более обходным путем для добавления их в классы ES6, но классы ES6 - это больше способ определить методы, чем повторять «классические» классы OO на таких языках, как Java и C# –