“ class”语法在javascript中如何工作?

时间:2019-10-26 23:08:46

标签: javascript reactjs class react-native ecmascript-6

我正在为反应本机应用程序构建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类语法中,基本上只是一个函数,该函数创建具有不同原型的对象?

还可以就哪种方法“更好”给出意见吗?

谢谢

2 个答案:

答案 0 :(得分:1)

就像其他任何编程语言一样,类实际上只是遵循面向对象的方法。除了语法和理解方式外,实际上并没有什么区别。

尤其是在JavaScript中,一个关键的区别是使用constructor函数从类创建对象。以后可以跟踪此构造函数,而常规函数则不会发生。从技术上讲,JavaScript甚至没有“类”。 ES6中添加了类语法,这几乎是标准的函数。

关于哪种方法最好,这取决于您。我认为,少即是多,而简单性和可读性是编程中最重要的事情。我会熟悉这两种方法,尤其是由于前钩时代和当前的钩子趋势,如果您打算与React一起工作。

答案 1 :(得分:-1)

我建议尽可能远离类(使用Javascript),请观看factory functions with fun fun function上的这段视频,以了解为什么工厂功能通常更好。 Class.prototype可能很棘手,而javascript中的“ this”关键字可能很棘手,而没有使用.bind(this)正确绑定方法调用。 React甚至将您的方法绑定到类中。

这并不是说类在任何方面都是不正确的,只是因为它们在javascript中可能不必要地变得复杂。