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

有两件事我很困惑。

  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:

  • 您不能创build超过1个对象。 因为一个模块只执行一次。 所以,在每一个导入,你会得到相同的对象。 一些类似于单身人士。 (如果我误解了,请在这里纠正)

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

类例2:

  • 如果你有一个只包含helper方法的类,而且这个对象没有任何状态,那么这个类的对象始终是没有意义的。 所以,在助手类的情况下,这不应该被使用。

对象文字示例:

  • 你不能做inheritance。

  • 同样的对象将被传递到每一个需求。 (纠正我,如果我在这里也是错误的)

请帮我理解这些概念,我错过了什么,我误解了什么,什么时候什么地方应该使用。 我会很感激你的帮助。

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

类示例1:您不能创build多个对象。 因为一个模块只执行一次。 所以,在每一个导入,你会得到相同的对象。 一些类似于单身人士。

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

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

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

例子2:如果你有一个只包含helper方法的类,并且这个对象没有任何状态,那么这个类的对象始终是没有意义的。 所以,在助手类的情况下,这不应该被使用。

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

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

你仍然可以使用Object.create来进行inheritance,或者寄生inheritance,或者其他任何东西。

同样的对象将被传递到每一个需求。

正确,但这不是一个缺点。 如果你的对象包含状态,你应该使用一个class来代替。

如果你的类有一个构造函数,你可以从这个类中构build几个对象:

 var Panier= require('./panier'); var panier1 = new Panier(13, 12, 25); var panier2 = new Panier(1, 32, 569); 

当然,您的Panier将在位于同一目录中的Panier.js文件中定义:

 module.exports = class Panier { constructor(code, qte, prix) { this.codeArticle = code; this.qteArticle = qte; this.prixArticle = prix; } getCode() { return this.codeArticle; } getQte() { return this.qteArticle; } getPrix() { return this.prixArticle; } }