Come ereditare un membro privato in JavaScript?
-
06-07-2019 - |
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
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.