Модификаторы доступа (частный, защищенный) в ES6
Примечание: я уже прошел ниже вопрос SO и 7 ответов (на данный момент) оСимволы, WeekMaps и Карты, пожалуйста, прочитайте полный вопрос, прежде чем голосовать:Частная собственность в классах JavaScript ES6
Статья:https://esdiscuss.org/topic/es7-property-initializers
Ниже мой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
Я хочу, чтобы это свойство и метод были видны в его собственном классе и внутри классов, расширяющих его.
Обходное решение / лучшее решение для достижения такого поведения приветствуется