Domanda

esiste un modo in JavaScript per ereditare i membri privati ??da una classe base a una sottoclasse?

Voglio ottenere qualcosa del genere:

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
}

Come posso ottenere una simulazione di classe, come in altri linguaggi oop (es. C ++) dove posso ereditare proprietà private (protette)?

Grazie, David Schreiber

È stato utile?

Soluzione

Usando Schema del costruttore di potenza Douglas Crockfords (il collegamento è a un video), puoi ottenere variabili protette come questa:

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 il modello del costruttore di potenza, non si utilizza new . Invece, basta dire var new_object = subclass (); .

Altri suggerimenti

Contrassegna le tue variabili private con una sorta di markup come un carattere di sottolineatura iniziale _ In questo modo sai che è una variabile privata (anche se tecnicamente non lo è)

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

Questo non è possibile. E questa non è in realtà una proprietà privata - è semplicemente una variabile normale disponibile solo nell'ambito in cui è stata definita.

Non è possibile, ma è possibile eliminare la proprietà dal prototipo della classe in modo che non sia ereditata:

SubClass.prototype.privateProperty  = undefined;

In questo modo non verrà ereditato, ma devi farlo per ogni "quotazione" privata proprietà nella classe base.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top