有两件事我很困惑。
使用任何 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();
对象文字示例:
// auth.js
module.exports = {
login: (req, res) => {...},
signup: (req, res) => {...}
};
// index.js
const auth = require('auth');
通过阅读有关它们的内容,我的想法是:
类例1:
类例2:
- 如果您有一个只包含辅助方法的类,并且该对象没有任何状态,则始终创建此类的对象是没有意义的。因此,对于辅助类,不应使用它。
对象文字示例:
请帮助我理解这些概念,我错过了什么,我误解了什么以及应该在何时何地使用什么。我将非常感谢你的帮助。
如果您认为我在某个地方犯了错误,请随意编辑问题。
类示例 1:您不能创建超过 1 个对象。因为一个模块只执行一次。因此,每次导入时您都会得到相同的对象。类似于单例的东西。
正确的。因此,这是一种反模式。不要使用它。class
语法不能替代对象文字。
您将无法访问该类的静态方法,因为您仅导出该类的对象。
理论上你可以做auth.constructor.…
但这不行。
类示例 2:如果您有一个只包含辅助方法的类,并且该对象没有任何状态,则始终创建该类的对象是没有意义的。因此,对于辅助类,不应使用它。
正确的。使用简单的对象文字代替,甚至更好:多个命名导出而不是“实用程序对象”。
对象文字示例:您不能进行继承。
您仍然可以使用Object.create
进行继承,或寄生继承,或任何其他事情。
相同的对象将在每个需求上传递。
没错,但这并不是缺点。如果你的对象包含状态,你应该使用class
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)