Como herdar um membro privado em JavaScript?
-
06-07-2019 - |
Pergunta
há uma maneira em JavaScript para herdar membros privados de uma classe base para uma classe sub?
Eu quero conseguir algo parecido com isto:
function BaseClass() {
var privateProperty = "private";
this.publicProperty = "public";
}
SubClass.prototype = new BaseClass();
SubClass.prototype.constructor = SubClass;
function SubClass() {
alert( this.publicProperty ); // This works perfectly well
alert( this.privateProperty ); // This doesn't work, because the property is not inherited
}
Como posso conseguir uma classe semelhante a simulação, como em outros oop-línguas (ex. C ++) onde eu possa herdar propriedades privadas (protegida)?
Obrigado, David Schreiber
Solução
Usando Douglas Crockfords construtor pattern potência (link é para um vídeo), você pode alcançar variáveis ??protegidas como esta:
function baseclass(secret) {
secret = secret || {};
secret.privateProperty = "private";
return {
publicProperty: "public"
};
}
function subclass() {
var secret = {}, self = baseclass(secret);
alert(self.publicProperty);
alert(secret.privateProperty);
return self;
}
Nota: Com o padrão construtor de energia, você não usar new
. Em vez disso, basta dizer var new_object = subclass();
.
Outras dicas
Marque seus privadas variáveis ??com algum tipo de marcação como um sublinhado _ Desta forma, você sabe que é uma variável privada (embora tecnicamente ele não é)
this._privateProperty = "private";
alert( this._privateProperty )
Isto não é possível. E isso não é realmente uma propriedade privada - é simplesmente uma variável regular que só está disponível no escopo em que foi definido.
Isso não pode ser feito, mas você pode excluir a propriedade do protótipo de classe para que ele não é herdada:
SubClass.prototype.privateProperty = undefined;
Dessa forma, ele não vai ser herdado, mas você precisa fazer isso para cada propriedade "privada" em sua classe de base.