2016-08-26 12 views
1

私はJavascriptでオブジェクト指向プログラミング技術を使いたいですが、クラスから別のクラスにメソッドにアクセスしませんでした。 >>事前にvar object=new one();Javascript - メソッドをクラスから別のクラスにアクセスするには?

ありがとう - 予期しない識別子:

class one{ 

    write(){ 
    console.log("Yes! I did!"); 
    } 
} 

class two{ 
    var object=new one(); 

    tryingMethod(){ 
    object.write(); 
    } 
} 

編集:

エラー:キャッチされないでSyntaxErrorどのように次のように行うことができます。

+0

変数をクラス内で直接宣言することはできません。 'var object = new one();'は構文エラーです。 – Barmar

+0

@Barmar Javascriptの新機能です) – hamdi

答えて

1

あなたの構文は合法ではありません。あなたのコンソールに、正しいコード行がないことを示すエラーがあるはずです。

静的メソッド(インスタンスデータは使用しません)の場合は静的メソッドとして宣言し、直接呼び出すことができます。

インスタンスメソッドの場合、通常、タイプoneのオブジェクトを作成し、そのオブジェクト(通常はコンストラクタ内)のメソッドを呼び出します。あなたは適切な構文を持っていない、非静的なケースでは

class One { 
    static write(){ 
    console.log("Yes! I did!"); 
    } 
} 

class Two { 
    tryingMethod(){ 
    One.write(); 
    } 
} 

は(あなたの特定のケースで罰金のように見える)メソッド静的を行います。あなたがこのような Twoのコンストラクタに Oneオブジェクトのインスタンスを作成したい表示されます。

class One { 
    write(){ 
    console.log("Yes! I did!"); 
    } 
} 

class Two { 
    constructor() { 
     this.one = new One(); 
    } 

    tryingMethod(){ 
    this.one.write(); 
    } 
} 

var x = new Two(); 
x.tryingMethod(); 

注:私はまたのために大文字で始まる識別子を使用しての一般的なJavascriptの規則を以下のよoneの代わりにOneなどのクラス/コンストラクター名を使用してください。

class One { 
    write() { 
    console.log("Yes! I did!"); 
    } 
} 

class Two { 
    constructor(one = new One()) { 
    this.one = one; 
    } 
    tryingMethod() { 
    this.one.write(); 
    } 
} 

は今、あなたは何ができるかである私は非常に緊密一緒に授業を結ぶと、このような何かをやっていないことをお勧めしたい何を

+0

彼はオブジェクトである 'object.write()'を呼び出しています。なぜそれは静的である必要がありますか? – Barmar

+0

@Barmar - 私の答えは、メソッドがインスタンスデータを使用するかどうかによって、静的または非静的のいずれかに進むことができることを明確に説明しています。彼の方法はインスタンスデータにアクセスしないので、静的なアプローチを示しました。私はまた、修正された非静的な例を追加しました(OPには間違いがあります)。 – jfriend00

+0

@Barmar - 静的でない場合の修正例を追加しました。 – jfriend00

2

... ...

const two = new Two(); 
two.write(); 

このあなたが望むならば、Oneクラスの模擬実装を渡すことができるので、あなたはより良い懸念を持つことができ、Twoクラスをより簡単にユニットテストすることができます。

describe("two class",() => { 
    it("should do something",() => { 
    const one = { 
     write: sinon.spy() 
    }; 
    const two = new Two(one) 

    two.tryingMethod(); 

    expect(one.write.calledOnce).to.be.ok; 
    }); 
}); 
関連する問題