2017-08-23 11 views
2

ChildClassParentClassに拡張されている場合、ParentClassコンストラクタからChildClassコンストラクタ関数にアクセスできますか?たとえば、次のように言い換える子クラスのコンストラクタに基本クラスのコンストラクタからアクセス

class ChildClass extends ParentClass 
{ 
    constructor() 
    { 
     super() 
    } 
} 

ChildClass.prop = 'prop' 

class ParentClass 
{ 
    constructor() 
    { 
     if (this._child().prop == 'prop') // here 
     { 
      console.log("All ok"); 
     } 
    } 

    get _child() 
    { 
     return this.constructor; 
    } 
} 

、私がやろうとしていることは検証目的のために

答えて

5

ことが可能ParentClassからChildClassコンストラクタ関数にアクセスすることで、子供の「静的」プロパティにアクセスしていますコンストラクタ?

すべての子は親ですが、すべての親が子ではありません。

いいえ。できません。いくつかの汚れたコードで可能であっても、しないでください。あなたのデザインについて考え直してください。継承の連鎖では、すべての子が親のプロパティを継承する必要があります。逆ではありません。

ちょうど3人の子供がいると思います。バマー。

+0

はい、可能です。そして、いいえ、 'this.constructor'は 'ダーティーコード'ではなく、静的なプロパティに到達するための規則的な方法です。デザインミスかどうかは、状況によって異なります。 – estus

2

childプロパティアクセサ、ない方法であるので、this._child代わりにthis._child()すべきである:

class ParentClass 
{ 
    constructor() 
    { 
     if (this._child.prop == 'prop') 
     { 
      console.log("All ok"); 
     } 
    } 

    get _child() 
    { 
     return this.constructor; 
    } 
} 

_childゲッターは冗長と誤解を招きます。通常this.constructorが直接使用されます。

class ParentClass 
{ 
    constructor() 
    { 
     if (this.constructor.prop == 'prop') 
     { 
      console.log("All ok"); 
     } 
    } 
} 

は、親クラスの「子」を参照して(親がないとその子供たちを「知る」べきではない、と_childが親自体することができます)意味的に間違っています、 thisを指しているわけではありません。

関連する問題