1

簡単な JavaScript の質問があります。

私が持っていると言うRootFile.js

import UserApi from './UserApi'
export default class RootFile {

  get userApi() {
    return UserApi;
  }
};

そして、私は得ましたUserApi.js

import Auth from './auth';
import Profile from './profile';

const merged = {
  ...new Auth, 
  ...new Profile 
}

export default merged;

そして、auth.jsまたはのような個別の機能ファイルを取得しprofile.jsました。

auth.js

export default class Auth{
  authLog(){
    console.log("DONE");
    //Gotta find a way to run this.
  }
}

profile.js

export default class Profile{
  profileLog(){
    console.log("DONE");
    //Gotta find a way to run this.
  }
}

今、私は呼び出すことができるようにしたい:

import RootFile from './RootFile'

RootFile.userApi.profileLog();
//and
RootFile.userApi.authLog();

私はそれを機能させることができません、それはRootFile.userApitypeofobjectですが、authLogですundefined。私は何を間違っていますか?

4

4 に答える 4

3

結局、私がやったのは次のことでした:

RootFile.jsは今このように見えます:

import UserApi from './UserApi'
export default class RootFile {

    get userApi(){
        return UserApi;
    }
};

get@Timがパフォーマンスが悪いと言ったので、私はそれらを取り除きました。

それから私UserApi.jsの今のように見えます:

import * as Auth from './auth';
import * as Profile from './profile';

const merged = {
  ...Auth, 
  ...Profile 
}

export default merged;

もうありませんnew

そして、auth.jsまたはのような個別の機能ファイルを取得しprofile.jsました。

auth.js

export function authLog(){
    console.log("auth test ");
},
export default auth;

profile.js

export function profileLog(){
    console.log("profile test ");
} 
export default profile;

@Bergiが提案したように、クラスはもうありません。

今私は呼び出すことができます:

import RootFile from './RootFile'

RootFile.userApi.profileLog();
//and
RootFile.userApi.authLog();

ご回答いただきありがとうございます。

于 2016-04-07T17:03:13.847 に答える
1

...スプレッド演算子の使用は正しくないと思います。代わりに使用してみてくださいObject.assign。ターゲット オブジェクトを取り、他のオブジェクトの列挙可能なすべてのプロパティをそれに割り当てます。

import Auth from './auth';
import Profile from './profile';

let merged = {};
Object.assign(merged, new Auth, new Profile);

export default merged;
于 2016-04-07T15:29:29.483 に答える
0

あなたがそうしたいとは思いません。それぞれのクラスでロジックを分離することの全体的なポイントは、より構造化された、より保守しやすいライブラリを取得することです。

私は構成に行きます:

export default class RootFile  {

  get userApi() {
    // Some logic here?

    // Just return a newly created api for now:
    return new UserApi;
  }
};

で同じことを行いUserApiます:

export default class UserApi {

  get profile() {
    return new Profile;
  }
};

そして、次のように使用します。

rootFile.userApi.profile.log("etc");

なぜ合成?

  • これにより、関数の再定義について心配する必要がなくなります。
  • マージされたコンストラクトでは不可能なのに対し、JavaScript エンジンはクラスを最適化できるようになりました。

また、getter はプロパティよりもパフォーマンスが低いことに注意してください。クラスの一般的に使用されるメンバーのプロパティを使用することを検討する必要があると思います

于 2016-04-07T15:30:03.833 に答える