在 Express + NodeJS 应用程序的控制器中使用 ES6 类或对象文字

2024-04-27

有两件事我很困惑。

  1. 使用任何 ES6 类或对象文字的优点是什么?

  2. 我应该在哪里使用它们?

下面提到了我正在尝试的一些示例。请让我知道何时使用特定的实现方式,何时不使用。

类例1:

// auth.js
class Auth {
  login(req, res) {...}
  signup(req, res) {...}
}

module.exports = new Auth();

// index.js
const auth = require('auth');

类例2:

// auth.js
class Auth {
  login(req, res) {...}
  signup(req, res) {...}
}

module.exports = Auth;

// index.js
const Auth = require('auth');
const auth = new Auth();

对象文字示例:

// auth.js
module.exports = {
  login: (req, res) => {...},
  signup: (req, res) => {...}
};

// index.js
const auth = require('auth');

通过阅读有关它们的内容,我的想法是:

类例1:

  • 您不能创建超过 1 个对象。因为一个模块只执行一次。因此,每次导入时您都会得到相同的对象。类似于单例的东西。 (如果我理解错了请指正)

  • 您将无法访问该类的静态方法,因为您仅导出该类的对象。

类例2:

  • 如果您有一个只包含辅助方法的类,并且该对象没有任何状态,则始终创建此类的对象是没有意义的。因此,对于辅助类,不应使用它。

对象文字示例:

  • 你不能做继承。

  • 相同的对象将在每个需求上传递。 (如果我这里也错了,请纠正我)

请帮助我理解这些概念,我错过了什么,我误解了什么以及应该在何时何地使用什么。我将非常感谢你的帮助。

如果您认为我在某个地方犯了错误,请随意编辑问题。


类示例 1:您不能创建超过 1 个对象。因为一个模块只执行一次。因此,每次导入时您都会得到相同的对象。类似于单例的东西。

正确的。因此,这是一种反模式。不要使用它。class语法不能替代对象文字。

您将无法访问该类的静态方法,因为您仅导出该类的对象。

理论上你可以做auth.constructor.…但这不行。

类示例 2:如果您有一个只包含辅助方法的类,并且该对象没有任何状态,则始终创建该类的对象是没有意义的。因此,对于辅助类,不应使用它。

正确的。使用简单的对象文字代替,甚至更好:多个命名导出而不是“实用程序对象”。

对象文字示例:您不能进行继承。

您仍然可以使用Object.create进行继承,或寄生继承,或任何其他事情。

相同的对象将在每个需求上传递。

没错,但这并不是缺点。如果你的对象包含状态,你应该使用class反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Express + NodeJS 应用程序的控制器中使用 ES6 类或对象文字 的相关文章