Dan*_*uze 12 javascript node.js express ecmascript-6
有两件事我很困惑.
使用任何ES6类或Object文字的优点是什么.
我应该在哪里使用它们?
我正在尝试的一些例子如下所述.请告诉我何时使用特定的实施方式以及何时不使用.
类示例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:
对象文字示例:
你不能做继承.
每个需求都会传递相同的对象.(纠正我,如果我错在这里)
请帮助我理解这些概念,我错过了什么,我误解了什么,应该在何时何地使用.我非常感谢你的帮助.
如果您认为我在某个地方犯了错误,请随意编辑问题.
类示例1:您不能创建多个对象.因为模块只执行一次.因此,在每次导入时,您将获得相同的对象.类似于单身人士的东西.
正确.因此,这是一个反模式.不要使用它.class语法不能替代对象文字.
您将无法访问该类的静态方法,因为您只导出该类的对象.
从理论上讲,你可以这样做,auth.constructor.…但这并不好.
类示例2:如果您的类只包含辅助方法,并且该对象没有任何状态,那么始终创建此类的对象是没有意义的.因此,在辅助类的情况下,不应该使用它.
正确.改为使用简单的对象文字,甚至更好:使用多个命名导出而不是"实用程序对象".
Object Literal示例:您不能继承.
您仍然可以使用Object.create继承或寄生继承,或任何事情.
每个需求都会传递相同的对象.
正确,但这不是一个缺点.如果你的对象包含状态,你应该使用一个class.
| 归档时间: |
|
| 查看次数: |
2931 次 |
| 最近记录: |