2016-07-27 1 views
1

Я не уверен, как задать этот вопрос. В этом примере легче отказаться.Доступ к защищенному члену из объекта с помощью такого же суперпротеиста указывает ошибку

tsc --version > 1.8.10

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

У меня есть супер-прототип под названием A с protected членом a. У меня есть два конструктора под названием B и C, каждый простираться от A (A их прототип прототипа?)

Экземпляр B создается в экземпляре C и я attemp доступ к общим защищенный член a нового экземпляра B. В Visual Studio кодекса линия прошлифованных следующее сообщение об ошибке:

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

Вы можете попробовать следующий код в playground

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

Я хотел бы знать, если это ошибка проектирования с моей стороны , Может быть, C экземпляры не должны иметь доступ к B обычно унаследованным защищенным членам, хотя результирующая js transpilation должна технически работать отлично, я точно знаю, что экземпляры B будут иметь член a.

+0

Я пытаюсь сделать что-то подобное, и я считаю, что вы получите ошибку, пытающуюся присвоить значение 'this.a' в методе' class C'. В моем случае я получал 'undefined' при попытке установить значения в защищенный объект в моем супер классе ... (интересно, он скомпилирован без ошибок - IDEA 2016.2) – Neoheurist

ответ

1

Как только вы говорите c:B любой доступ к членам c будет разрешено, только если они являются публичными членами B (т.е. вы не можете получить доступ к private или protected членов).

Смежные вопросы