Bog*_*scu 7 javascript design-patterns constants hardcoded node.js
我是节点的新手,但我来自广泛的编程背景.在我看过的任何地方(无论是在教程中还是在我看过的生产代码中),人们都压倒性地使用硬编码字符串而不是常量来识别事件.
我从npm 最依赖的软件包列表中选择了一个随机的例子来说明我的意思:«请求»库 - 为什么它们每次都输入字符串来发出和消耗 «data»事件'data',而不是在库中定义不变?
在我所知道的任何编程语言中,使用常量都被认为是一种很好的实践,但是节点开发人员似乎完全满足于硬编码方法.为什么?
因为由于 JavaScript 的动态特性,它不适用于 Node.js。
假设一个模块定义了一个常量data。然后它需要将其导出,作为其事件发射 API 的一部分。例如:
const data = 'data';
class Api extends EventEmitter () {
constructor () {
setTimeout(() => {
this.emit(data);
}, 2 * 1000);
}
}
module.exports = {
data,
Api
};
Run Code Online (Sandbox Code Playgroud)
然后,从外部我们会得到如下的东西:
const foo = require('./foo');
const { Api, data } = foo;
const api = new Api();
api.on(data, () => {
// ...
});
Run Code Online (Sandbox Code Playgroud)
基本上是这样的。data如果你一开始就输错了怎么办?如果不是
const { Api, data } = foo;
Run Code Online (Sandbox Code Playgroud)
你输入错误:
const { Api, Data } = foo;
Run Code Online (Sandbox Code Playgroud)
它会工作,没有任何错误。Data就这样undefined。当您尝试访问不存在的对象的属性时,您不会在 JavaScript 中收到错误,您只会返回undefined。
因此,您不会收到编译器错误,但现在您正在(在后台)发出“数据”,但您正在监听的是undefined. 该常量没有任何帮助,您仍然必须确保没有输入错误的名称。
这并不比使用不允许输错任何内容的字符串更好或更坏。
因此,长话短说,常量并不能改善情况,它们只会导致更多的输入并使事情变得更复杂 - 但它们并不能解决任何实际问题。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |