我有一个快速的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.userApi
是object
的类型,但authLog
是undefined
。
我做错了什么?
答案 0 :(得分: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();
谢谢大家的答案,但毕竟我会这样做,效果很好。
答案 1 :(得分:0)
我不认为使用...
点差运算符是正确的。尝试使用Object.assign
- 它需要一个目标对象并将其他对象的所有可枚举属性分配给它。
import Auth from './auth';
import Profile from './profile';
let merged = {};
Object.assign(merged, new Auth, new Profile);
export default merged;
答案 2 :(得分: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");
还要记住,getter的性能低于属性。我认为你应该考虑为常用的类成员
使用属性