Pregunta

¿hay alguna manera en JavaScript para heredar miembros privados de una clase base a una subclase?

Quiero lograr algo como esto:

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
}

¿Cómo puedo lograr una simulación de clase, como en otros lenguajes oop (por ejemplo, C ++) donde puedo heredar propiedades privadas (protegidas)?

Gracias, David Schreiber

¿Fue útil?

Solución

Usando patrón de constructor de energía Douglas Crockfords (el enlace es a un video), puede lograr variables 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: Con el patrón del constructor de potencia, no utiliza new . En cambio, solo diga var new_object = subclass (); .

Otros consejos

Marque sus variables privadas con algún tipo de marcado como un guión bajo principal _ De esta manera, sabes que es una variable privada (aunque técnicamente no lo es)

this._privateProperty = "private";
alert( this._privateProperty )

Esto no es posible. Y eso no es realmente una propiedad privada, es simplemente una variable regular que solo está disponible en el ámbito en el que se definió.

Eso no se puede hacer, pero puede eliminar la propiedad del prototipo de clase para que no se herede:

SubClass.prototype.privateProperty  = undefined;

De esa forma no se heredará, pero debe hacerlo para cada "privado". propiedad en su clase base.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top