2017-01-11 12 views
1

内から一つのクラスのメソッドを実行しますが、ここで私のセットアップがある:活字体:私はこれを正しく行うことはできません別のクラス

私は2つのファイルで2つのクラスがあります。

class-a.ts/classA 
class-b.ts/classB 

をそれから私は、名前空間を持っていますファイル(namespace.ts):

import { classA } from "./class-a"; 
import { classB } from "./class-b"; 

namespace App { 
    let a = new classA(); 
    let b = new classB(); 
} 

私の質問は、classBのclassAで利用できるメソッドをどのように呼び出すのですか?今、私が試みて、a.exampleMethod();をb内に呼び出すと、インスタンス名を見つけることができません。それは利用できないはずですか?

+0

'classB'は' classA'メソッドを呼び出す必要がある場合、それはあなたがクラスA 'インポートする必要がありますことを意味し、それを知っている必要があります'in'/class-b' –

+0

ここでは多くのことを考慮する必要があります。 classAとclassBは何らかの形で関係していますか? ClassAはclassBを呼び出すべきですか?おそらく呼び出されるメソッドは静的である可能性がありますか?たぶん、この機能をヘルパーclassCに組み込み、classBに渡すことは可能でしょうか? – ToastyMallows

+0

@ToastyMallows良い点。はい、彼らは関連しています。 classAはアプリケーションの機能であり、classBはUI /イベントハンドラなどです。したがって、classBは多くのclassAのメソッドを呼び出します。 –

答えて

0

いくつかの方法は、あなたがこれを並べ替えることができますがあります。

  • (あなたが必要とする範囲に応じて、VARにフィールド)ClassBの中にクラスAのインスタンスが
  • はミックスインを使用AN ClassBのを作ります他の回答に加えてextendsキーワード
-1

を使用してクラスAを拡張するには、コンストラクタにClassAClassBを渡すことができます。ここでのメリットは、ClassAClassBの両方が互いに依存することなくテストできることです(ClassAにを実装するMockClassBを渡して、たとえばClassAをテストすることができます)。

これはニーズに合わせて調整できます。

どこかに、アプリケーションのルートに続いて
interface IClassB 
{ 
    SomeMethod(): void; 
} 

class ClassB implements IClassB 
{ 
    public SomeMethod(): void 
    { 
     // do something to update the UI 
    } 
} 

class ClassA 
{ 
    private classB: IClassB; 

    constructor(classB: IClassB) 
    { 
     this.classB = classB; 
    } 

    public SomeFunctionality(): void 
    { 
     this.classB.SomeMethod(); 
    } 
} 

let iclassB: IClassB = new ClassB(); 
let classA: ClassA = new ClassA(iclassB); 
+0

@downvoter、あなたの考えは興味がありますか? – ToastyMallows

関連する問題