Wie Erstellen Sie Geschützte Objekt-Eigenschaften in JavaScript

Ist es eine JavaScript-Muster, das imitiert "Geschützt" Objekt-Eigenschaften wie, was Sie sehen in Sprachen wie C++ ??

Im Grunde genommen, ich möchte ein Objekt erstellen, ist Eine, die hat eine Reihe von "geschützt" Objekteigenschaften zugegriffen werden kann NUR von Methoden definiert werden, aus dem Prototyp-Objekt A. D. H. - NICHT öffentlich zugängliche-von den nicht-prototypischen Methoden von A.

Beispielsweise ideal wäre etwa so:

function A(){
    var prop1 = 1;      
}

A.prototype.myFunc = function(){
    var newVar = this.prop1;   //newVar now is equivalent to 1
}

var instanceOfA = new A();
var newVar2 = instanceOfA.prop1;  //error given as prop1 is "protected"; hence undefined in this case

BTW - ich will nicht das Muster der privilegierten member-Funktionen Zugriff auf private Eigenschaften, da Sie die member-Funktion ist immer noch öffentlich.

NÖ............
Mein Tipp, wie so oft, nicht mit Gewalt die Sichtbarkeit in JavaScript. Etwas Dinge möglich sind, mit Verschluss etc, aber die Sprache ist nicht dafür vorgesehen. Es wird Ihr code komplexer. Stattdessen dokumentieren Sie Ihre Methoden richtig als private oder public, und wenn es andere Entwickler tun nicht Folgen Sie Ihrer Spezifikation, ist es Ihr problem.
Btw, Prototyp-Objekte können ergänzt werden (Sie sind nicht abgedichtet) - nichts verhindert, dass ein Eindringling das hinzufügen neuer Methoden, um das Prototyp-Objekt. So eine Eigenschaft kann ausschließlich über Prototypen Methoden wäre nicht sicher sowieso (selbst wenn es möglich wäre).
JavaScript-ist das nicht Klasse-orientiert, Objekt-orientierte-nicht im Sinne von Objekt-orientiert, bezieht sich auf Instanzen der Klasse, sondern im Sinne von... einfach nur Objekte. Es gibt keine Funktionen wie Ihre übliche Klasse Mitglied Schlüsselwörter in Java oder C++, müssen Sie stattdessen gestalten Sie Ihre Implementierung auf der Basis des Objekt-und event-driven Natur der Sprache.
Es gibt Lösungen, auf der Grundlage der neuen features in ES6. Siehe zum Beispiel hier: philipwalton.com/articles/...

InformationsquelleAutor Drake Amara | 2011-11-07

Schreibe einen Kommentar