2016-07-27 1 views
1

Ich bin mir nicht sicher, wie ich diese Frage stellen soll. Das Beispiel ist einfacher zu untergliedern.Der Zugriff auf ein geschütztes Element von einem Objekt mit demselben Super-Prototyp zeigt einen Fehler an

tsc --version > 1.8.10

TLDR: I would like to know if this is a design error on my part

Ich habe einen Super-Prototyp A mit einem protected Mitglied a genannt. Ich habe zwei Konstrukteurs B und C genannt, erstrecken sich jeweils von A (A ihre Prototyp Prototyp ist?)

Eine Instanz B in einer Instanz von C erstellt wird und ich attemp gemeinsame geschützt Mitglied zuzugreifen a der neuen Instanz von B. In Visual Studio-Code Durchführungen die Linie die folgenden Fehler:

property a is protected and only accessible through an instance of class C .

Sie können den folgenden Code in den

abstract class A { 
    protected a = 'a'; 
} 
class B extends A {} 
class C extends A { 
    c: B; 
    constructor() { 
     super(); 
     this.c = new B(); 
    } 
    get() { 
     return this.c.a; 
    } 
} 

playground versuchen würde ich gerne wissen, ob dies ein Design-Fehler von meiner Seite ist . Vielleicht C Instanzen sollten nicht Zugriff auf B gemeinsam ererbte geschützte Mitglieder, obwohl die resultierende js Umarbeitung sollte perfekt laufen, weiß ich sicher, dass Instanzen von B ein Mitglied a haben wird.

+0

Ich versuche, etwas ähnliches zu tun, und ich glaube, dass Sie einen Fehler bekommen würden, wenn Sie versuchen, einen Wert für "this.a" innerhalb einer Methode der "Klasse C" zuzuweisen. In meinem Fall wurde ich "undefiniert", als ich versuchte, Werte in ein geschütztes Objekt in meiner Superklasse zu setzen ... (interessanterweise kompilierte es ohne Fehler - IDEA 2016.2) – Neoheurist

Antwort

1

Sobald Sie sagen c:B jeder Zugriff auf Mitglieder der c nur dann, wenn sie öffentliche Mitglieder von B (dh Sie Zugriff private oder protected können nicht Mitglieder) sind zulässig.

Verwandte Themen