有两件事我很困惑。
使用任何ES6类或对象文字的优点是什么。
我应该在哪里使用它们?
我尝试过的一些例子如下所述。请让我知道何时使用特定的实施方式以及何时不使用。
类示例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();
Object Literal示例:
// auth.js
module.exports = {
login: (req, res) => {...},
signup: (req, res) => {...}
};
// index.js
const auth = require('auth');
我从阅读中得到的结论是:
类示例1:
您无法创建多个对象。因为模块只执行一次。因此,在每次导入时,您将获得相同的对象。类似于单身人士的东西。 (如果我误解了,请在此纠正我)
您将无法访问该类的静态方法,因为您只导出该类的对象。
类示例2:
对象文字示例:
你不能继承。
每个需求都会传递相同的对象。 (如果我在这里错了,请纠正我)
请帮助我理解这些概念,我错过的内容,我误解的内容以及应该在何时何地使用的内容。我非常感谢你的帮助。
如果您认为我在某个地方犯了错误,请随时编辑问题。
答案 0 :(得分:6)
类示例1:您不能创建多个对象。因为模块只执行一次。因此,在每次导入时,您将获得相同的对象。类似于单身人士的东西。
正确。因此,这是一个反模式。不要使用它。 class
语法不能替代对象文字。
您将无法访问该类的静态方法,因为您只导出该类的对象。
从理论上讲,你可以做auth.constructor.…
,但这并不好。
类示例2:如果您的类只包含辅助方法,并且该对象没有任何状态,那么始终创建此类的对象是没有意义的。因此,如果是辅助类,则不应使用它。
正确。改为使用简单的对象文字,甚至更好:使用多个命名导出而不是“实用程序对象”。
Object Literal示例:您不能继承。
您仍然可以使用Object.create
进行继承,或寄生继承,或者任何事情。
每个要求都会传递相同的对象。
正确,但这不是一个缺点。如果您的对象包含状态,则应该使用class
代替。
答案 1 :(得分:0)
如果你的类有一个构造函数,你可以从这个类中构建几个对象:
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;
}
}