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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top