我正在为反应本机应用程序构建api服务,我很好奇设置实例然后返回带有api函数闭包的对象的函数之间的区别是什么:
export default AuthApiService = (bearerToken) => {
const instance = axios.create({
baseURL: `http://${BASE_URL}`,
timeout: 5000,
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${bearerToken}`
}
})
const signup = async (email, password) => {
try {
const response = await instance.post(`/users`, {
email,
password
})
return response.data
} catch (err) {
console.log('error in signup api call', err, err.response)
throw err
}
}
const facebookLogin = async () => {
try {
} catch (err) {}
}
return {
signup,
facebookLogin
}
}
和一个使用构造函数语法创建对象并可以直接访问对象方法的类,如下所示:
export default class AuthApiService {
constructor(bearerToken) {
this.instance = axios.create({
baseURL: `http://${BASE_URL}`,
timeout: 5000,
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${bearerToken}`
}
})
}
signup = async (email, password) => {
try {
const response = await this.instance.post(`/users`, {
email,
password
})
return response.data
} catch(err) {
console.log('error in signup api call', err, err.response)
throw err
}
}
facebookLogin = async () => {
try {
} catch(err) {
}
}
}
在javascript类语法中,基本上只是一个函数,该函数创建具有不同原型的对象?
还可以就哪种方法“更好”给出意见吗?
谢谢
答案 0 :(得分:1)
就像其他任何编程语言一样,类实际上只是遵循面向对象的方法。除了语法和理解方式外,实际上并没有什么区别。
尤其是在JavaScript中,一个关键的区别是使用constructor
函数从类创建对象。以后可以跟踪此构造函数,而常规函数则不会发生。从技术上讲,JavaScript甚至没有“类”。 ES6中添加了类语法,这几乎是标准的函数。
关于哪种方法最好,这取决于您。我认为,少即是多,而简单性和可读性是编程中最重要的事情。我会熟悉这两种方法,尤其是由于前钩时代和当前的钩子趋势,如果您打算与React一起工作。
答案 1 :(得分:-1)
我建议尽可能远离类(使用Javascript),请观看factory functions with fun fun function上的这段视频,以了解为什么工厂功能通常更好。 Class.prototype可能很棘手,而javascript中的“ this”关键字可能很棘手,而没有使用.bind(this)正确绑定方法调用。 React甚至将您的方法绑定到类中。
这并不是说类在任何方面都是不正确的,只是因为它们在javascript中可能不必要地变得复杂。