2016-07-27 3 views
1

この質問の回答方法はわかりません。この例は下見しやすいです。スーパープロトタイプが同じオブジェクトから保護されたメンバーにアクセスすると、エラーが表示される

tsc --version > 1.8.10

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

私はprotectedメンバーaAと呼ばれるスーパープロトタイプを持っています。 私は(?Aそのプロトタイプのプロトタイプです)Aからそれぞれが伸びる、2つのコンストラクタがBCと呼ばれてい

BのインスタンスがCのインスタンスで作成され、私はアクセスするためにattemp 共通保護されたメンバーaBの新しいインスタンスの私はこれが私の部分の設計誤差があるかどうかを知りたい

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

に次のコードを試すことができます:Visual Studioのコードではラインは、次のエラーをスルー。たぶんCインスタンスはBに一般に継承された保護されたメンバーに継承されるべきではありません。js transpilationは技術的に完全に実行する必要がありますが、Bのインスタンスにはaというメンバがあります。

+0

私は同様のことをやろうとしています。クラスCのメソッド内で 'this.a'に値を代入しようとするとエラーが発生すると思います。私の場合、スーパークラスのプロテクトされたオブジェクトに値を設定しようとすると 'undefined 'となってしまいました...(興味深いことに、エラーなくコンパイルされました - IDEA 2016.2) – Neoheurist

答えて

1

とすぐに、彼らはBの公共のメンバーは(つまり、あなたがprivateprotectedメンバーにアクセスすることができない)であればcのメンバーへのアクセスのみが許可されますc:Bを言うように。

関連する問題