2017-12-07 20 views
0

高レベル:私は、クラス "let _somevar"として定義された変数を持っています。 私は別のクラスからこの変数に値を割り当てる方法を探しています。Typescriptの別のクラスの変数にアクセスできますか?

詳細はもう少し複雑です: クラスAはいくつかのモジュールを遅延ロードするための初期化メソッドを含んでいて、 _somevar "は遅延ロードされているモジュールを保持しています。クラスAには、公開メソッドもあり、この変数がnullかどうかをチェックし、それに応じて実行します。

クラスBは、モジュールを同期的に/直接(遅延ロードではなく)初期化する機能を提供します。問題は、 "_somevar"が設定されていないため、公開メソッドがクラスAから実行されなくなりました。クラスAのパブリックメソッドを引き続き使用できるようにクラスBから設定しようとしています。

私はこれらのクラスに対して実行できるリファクタリングがたくさんあることを理解しています。私はコードベースを所有していないので、ここで最小限のコード変更を加えて動作させようとしています。

あなたの提案をお聞きしたいと思います。ありがとうございました!

+0

あなたのコードを記述しないでください:

myMethod() { this._somevar.doSomething(); } 

が、このなります。投稿する。 –

答えて

0

変数に別のクラスでアクセスすることはできません。

You プロパティやメソッドなどの公開メンバーにアクセスできます。

クラスを拡張すると、サブクラスは保護されたメンバーにアクセスできます。

ここではいくつかの解決策がありますが、そのうちの2つはプロパティを変数にプロモートします。もう片方はしません。

コンストラクタ

ClassAsomevarの初期化に依存する場合、それはそのコンストラクタで依存関係を必要とすることで、依存関係を明示的に行うことができます。このようにして、依存関係が提供される前に依存関係を使用するメソッドを呼び出すことはできません。

class Example { 
    constructor(private somevar: SomeVar) { 
    } 


    myMethod() { 
     this._somevar.doSomething(); 
    } 
} 

セットの依存関係

あなたの問題を解決する光タフな変更を行っている場合は、依存関係を受け取るメソッドを追加することができます。

setDependency(somevar: SomeVar) { 
    this.somevar = somevar; 
} 

あなたはその後、前にこれを呼び出すことができます現在失敗している方法を使用します。しかしながら、これは一時的な結合の一形態である。 myMethodが呼び出される前にsetDependencyを呼び出す必要があります。メソッド

依存関係が初期化されていない場合に失敗する方法に

パスは、依存関係を必要とするように変更することができ...例えば

、この:

myMethod(somevar: SomeVar) { 
    somevar.doSomething(); 
} 

関連する問題