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

Dan*_*uze 12 javascript node.js express ecmascript-6

有两件事我很困惑.

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

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

我正在尝试的一些例子如下所述.请告诉我何时使用特定的实施方式以及何时不使用.

类示例1:

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

module.exports = new Auth();

// index.js
const auth = require('auth');
Run Code Online (Sandbox Code Playgroud)

类示例2:

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

module.exports = Auth;

// index.js
const Auth = require('auth');
const auth = new Auth();
Run Code Online (Sandbox Code Playgroud)

对象文字示例:

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

// index.js
const auth = require('auth');
Run Code Online (Sandbox Code Playgroud)

我从阅读它们的想法是:

类示例1:

  • 您不能创建多个对象.因为模块只执行一次.因此,在每次导入时,您将获得相同的对象.类似于单身人士的东西.(如果我误解了,请在这里纠正我)

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

类示例2:

  • 如果你有一个只包含辅助方法的类,并且该对象没有任何状态,那么始终创建该类的对象是没有意义的.因此,在辅助类的情况下,不应该使用它.

对象文字示例:

  • 你不能做继承.

  • 每个需求都会传递相同的对象.(纠正我,如果我错在这里)

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

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

Ber*_*rgi 6

类示例1:您不能创建多个对象.因为模块只执行一次.因此,在每次导入时,您将获得相同的对象.类似于单身人士的东西.

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

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

从理论上讲,你可以这样做,auth.constructor.…但这并不好.

类示例2:如果您的类只包含辅助方法,并且该对象没有任何状态,那么始终创建此类的对象是没有意义的.因此,在辅助类的情况下,不应该使用它.

正确.改为使用简单的对象文字,甚至更好:使用多个命名导出而不是"实用程序对象".

Object Literal示例:您不能继承.

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

每个需求都会传递相同的对象.

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

  • 不,`class`语法是构造函数声明+原型的替代品.你应该只在它们携带状态时使用它们/你需要多个实例.你可以而且应该将它们与对象混合,使用适当的东西.请注意,在ES6中,使用简洁方法和计算属性增强了对象文字语法. (5认同)