I'm looking for a way to make both attributes and methods invisible so they are not accessible from outside the class. But I also wanted to use the modern approach to do this (classNameClass {}). After many attempts I have taken a different approach to everything I have found: although it works exactly as I need it, and, in my opinion, it is much simpler and readable, I do not know if this is valid and / or conventional.
Can I do this? Or is there a convention that forbids this approach?
See the code carefully:
'use strict';
//O objetivo dessa class é tornar os dados restritos
function ExemplePrivate(value){
var _value = value; //Privado
this.set_value = function(val){
//Poderá fazer uma validação antes
_value = val;
}
this.get_value = function(){
//Poderá fazer uma validação antes
return _value;
}
}
//Class filha que será pública
class ClassPublic extends ExemplePrivate{
//adicional code
}
var cPublic = new ClassPublic('A class filha foi <b>instanciada</b>');
document.querySelector('#p1').innerHTML = cPublic.get_value();
cPublic.set_value('A class filha foi <b>modificada</b>');
document.querySelector('#p2').innerHTML = cPublic.get_value();
// Note que o resultado é bloqueado
document.querySelector('#p3').innerHTML += cPublic._value+".";
#p3{color:red}
<!-- Look in JS -->
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"> O resultado para <b>cPublic._value</b> tem que ser <b>undefined</b> porque é invisível: </p>