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.jsor 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.userApiis a typeof object,但authLogis 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.jsor 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 回答
0

我这样做了-

import { One } from './one.js'
import { Two } from './two.js'
import { Three } from './three.js'

const MasterClazz2 = {
    ...new One(),
    ...new Two(),
    ...new Three()
}

export default MasterClazz2

然后我像这样导入-

import func from './combinedClazz.js'

func.oneFunc()
func.threeFunc()
func.threeFunc()
func.threeNameFunc('Sebastian')

console.log('variable: ' + func.one)
console.log('variable: ' + func.two)
console.log('variable: ' + func.three)

功能 在智能感知中显示类一、二和三的所有变量和函数,就好像它们来自一个类

于 2022-02-27T17:49:03.133 回答