我目前正在学习ES6。当我玩新功能时,我一度陷入困境。如何调用类方法。
所以,让我们说我在一个文件中有一个类,如下所示:
class Auth {
checkUserSignedIn() {
//check user signed in
}
signupUser(account) {
//signup user
}
loginUser(account) {
//login user
}
getCurentUser() {
//Current User
}
}
module.exports = Auth;
然后在其他文件中,让我们说一个我想称之为控制器的控制器。
const Auth = require('./auth');
class Controller {
signupUserUsingEmailAndPass(user) {
Auth.signupUser(account);
}
loginUserUsingEmailAndPass(account) {
Auth.loginUser(account);
}
isUserSignedIn() {
checkUserSignedIn();
}
}
module.exports = Controller;
但这根本不起作用。我想有些东西我不能正确理解。有什么建议/意见吗?
答案 0 :(得分:0)
Javascript课程的工作方式与您习惯的模块模式(看起来似乎)完全不同。导出`Auth时,您正在导出类定义但仍需要实例化它。
let auth = new Auth()
auth.signupUserUsingEmailAndPass() // or any other function you define
在javascript中,当您想要使用数据或某种状态填充类时,类很有用。如果您不想要或不需要,那么您可以使用模块。
答案 1 :(得分:0)
类中定义的方法需要该类的实例,即某处new Auth
。
您的控制器应该定义
class Controller {
constructor(auth) {
this.auth = auth;
}
}
require('myclass')
上的这种方法允许您注入Auth
类的不同实现。
如果您不希望这些方法的Auth
实例,请将它们声明为静态。有关here
答案 2 :(得分:0)
您需要实施Auth
const authorization = new Auth();
可能在包含Auth
类的文件中,只需导出实例。
export const authorization = new Auth();
或者,如果您希望此方法在外面可用。您可以制作方法static
。只需在方法创建过程中在方法名称前添加static
关键字。
您可以阅读有关静态方法here
的更多信息