2017-08-15 13 views
1

現在、私はES6を学習しています。私が新しい機能を使っている間、私は一点で立ち往生した。クラスメソッドを呼び出す方法。JavaScriptのクラスメソッドを呼び出す方法

class Auth { 
    checkUserSignedIn() { 
     //check user signed in 
    } 

    signupUser(account) { 
     //signup user 
    } 

    loginUser(account) { 
     //login user 
    } 

    getCurentUser() { 
     //Current User 
    } 
} 

module.exports = Auth; 

、その後、いくつかの他のファイルでは、のは、コントローラが、私はこれらの関数を呼び出すしたいとしましょう:

それでは、私は以下のように1つのファイルにクラスを持っているとしましょう。

const Auth = require('./auth'); 
class Controller { 
    signupUserUsingEmailAndPass(user) { 
     Auth.signupUser(account); 

    } 

    loginUserUsingEmailAndPass(account) { 
      Auth.loginUser(account); 
    } 

    isUserSignedIn() { 
     checkUserSignedIn(); 
    } 
} 

module.exports = Controller; 

しかし、これはまったく機能しません。私は正しく理解していないことがあると思います。どんな提案/助言?

+1

hereについての詳細を読むことができます。クラスをすべて使用する必要はなく、たくさんの関数を持つオブジェクトリテラルを返す必要があるようです。 – zzzzBov

+1

これは非常にあなたのように聞こえます**ステートフルインスタンスにのみ便利な 'class' **は必要ありません。 – Bergi

+0

@ベルギーこれは良いアプローチかもしれないと思ったが、うまくいかなかったようだ。 –

答えて

0

Javascriptクラスは、あなたが慣れていたモジュールパターン(それはそう思われます)のようには動作しません。 `Authをエクスポートすると、クラス定義がエクスポートされますが、まだインスタンス化する必要があります。

let auth = new Auth() 
auth.signupUserUsingEmailAndPass() // or any other function you define 

JavaScriptは、データやその他の状態を設定するときに便利です。あなたがそれを望まない、または必要としない場合は、モジュールを使用することができます。

+0

あなたの解決策に従うことによってエラーが発生する。 TypeError:未定義の 'methodName()'プロパティを読み取ることができません。 –

+2

...または実際に*モジュール*が必要な場合は、 'class'を使用しないでください。 – Bergi

+0

さて、methodNameはプレースホルダでした。あなたのケースでは、signupUserUsingEmailAndPassまたはあなたが定義したその他のものがあります。私はそれを反映する答えを編集します。 – klvs

0

クラスで定義されたメソッドには、そのクラスのインスタンス、つまりnew Authが必要です。

お使いのコントローラが定義されるべきは、あなたのAuthクラスの異なる実装を注入するためrequire('myclass')を超えるこのアプローチが可能に

class Controller { 

    constructor(auth) { 
    this.auth = auth; 
    } 
} 

を持っています。

これらのメソッドには、Authのインスタンスが必要でない場合は、静的として宣言してください。そのhere

0

の詳細は、あなたはAuthクラスを含むファイル内もしかAuth

const authorization = new Auth(); 

をinstatiate、とだけインスタンスをエクスポートするか必要があります。

export const authorization = new Auth(); 

または、この方法を外部で利用できるようにする場合。メソッドstaticを作成することができます。メソッドの作成中にメソッド名の前にstaticキーワードを追加するだけです。

あなたは、静的メソッドあなたがそれらのメンバ関数を呼び出すために `Auth`のインスタンスを作成する必要が

+0

解決策に従うとエラーが発生します。 TypeError:未定義のプロパティ 'signupUser()'を読み取ることができません –

+0

どちらですか?静的メソッドを使用しますか?または、クラスのインスタンスをエクスポートしますか?それはインポートが未定義であるようです。 'import {authorization} from ... 'を使ってインポートしましたか? 静的メソッドを使用した場合は、元のように使用してください。新しいインスタンスは必要ありません。 – Olaf

+0

静的は正常に動作しますが、クラスのインスタンスをエクスポートするとエラーが発生します –

関連する問題