Frage

Gibt es eine Möglichkeit in JavaScript private Mitglieder von einer Basisklasse zu einer Unterklasse zu erben?

Ich möchte etwas wie folgt erreichen:

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
}

Wie kann ich eine Klasse-ähnliche Simulation, wie in anderen oop-Sprachen (z. B. C ++) erreichen, wo ich privat (geschützt) Eigenschaften erben können?

Danke, David Schreiber

War es hilfreich?

Lösung

Douglas Crockfords Macht Konstruktor Muster (Link zu einem Video ist), können Sie geschützte Variablen wie dieses Ziel zu erreichen:

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

Hinweis: Mit den Kraft Konstruktor Mustern, die Sie nicht new verwenden. Stattdessen nur var new_object = subclass(); sagen.

Andere Tipps

Markieren Sie Ihre privat Variablen mit irgendeiner Art von Markup wie ein Unterstrich _ So wissen Sie, es ist eine private Variable (obwohl technisch ist es nicht)

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

Dies ist nicht möglich. Und das ist nicht wirklich ein Privateigentum - es ist einfach eine reguläre Variable, die in dem Geltungsbereich nur verfügbar ist, in der sie definiert wurde.

Das kann nicht getan werden, aber man konnte die Eigenschaft aus der Klasse Prototyp löschen, so dass es nicht vererbt wird:

SubClass.prototype.privateProperty  = undefined;

Auf diese Weise wird es nicht vererbt werden, aber Sie müssen, dass jede „private“ Eigenschaft in Ihrer Basisklasse für tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top