Question

Existe-t-il un moyen en JavaScript d'hériter des membres privés d'une classe de base vers une sous-classe?

Je veux réaliser quelque chose comme ceci:

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
}

Comment puis-je obtenir une simulation de type classe, comme dans d'autres langages oop (par exemple, C ++) où je peux hériter de propriétés privées (protégées)?

Merci David Schreiber

Était-ce utile?

La solution

En utilisant le modèle de constructeur d’alimentation de Douglas Crockfords (lien vers une vidéo), vous pouvez obtenir des variables protégées comme celle-ci:

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;
}

Remarque: avec le modèle de constructeur de puissance, vous n'utilisez pas new . Dites plutôt var new_object = subclass (); .

Autres conseils

Marquez vos variables privées avec une sorte de balisage comme un tiret bas _ De cette façon, vous savez que c'est une variable privée (bien que ce ne soit techniquement pas le cas)

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

Ce n'est pas possible. Et ce n'est pas vraiment une propriété privée - c'est simplement une variable régulière qui n'est disponible que dans la portée dans laquelle elle a été définie.

Cela ne peut pas être fait, mais vous pouvez supprimer la propriété du prototype de classe afin qu'elle ne soit pas héritée:

SubClass.prototype.privateProperty  = undefined;

Ainsi, il ne sera pas hérité, mais vous devez le faire pour chaque "privé". propriété dans votre classe de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top