javascript - 现代 Javascript 中的闭包 VS 类

对于主要目标是创建另一个函数的闭包,我想知道在现代 javascript 中,是否最好只在现代 javascript 中使用类。

// Closure way private counter
const countPlusOne = () => {
    let count = 0;
    return () =>{
        count++;
        console.log(count);
    }
}
let demoAdd = countPlusOne();
demoAdd(); // 1
demoAdd(); // 2
demoAdd(); // 3

老实说,我从来不喜欢以这种方式使用闭包(但我认为它们非常适合中间件之类的东西),因为它们很难阅读。

那么,我是否应该像上面那样将闭包重构为类?它们的行为似乎更类似于其他语言中的典型对象。

// Class way private counter
class countPlusClass{
    count = 0;
    add(){
        this.count++;
        console.log(this.count)
    }
}
const demo = new countPlusClass();
demo.add(); // 1
demo.add(); // 2
demo.add(); // 3

最佳答案

不,类(class)并不总是更好。他们只是不同。我想说的主要区别是

  • 构造函数/工厂函数返回的事物的接口(interface)。类实例具有属性和方法,通常有多个,而闭包只是一个可以调用的函数 - 具有单一功能。调用它们的语法不同,额外的方法名称有时是多余的,有时是有益的。
  • 在 OOP 中,对象应该具有身份和状态。在 FP 中,函数应该是纯函数。当然,您不需要遵循特定的范例,无状态对象和不纯函数都很好(尽管那时可能称它们为“过程”),但在争论可读性和可维护性时请记住这些约定。

所以请明智地选择。您(可能在将来)需要多种方法吗?你封装状态吗?然后使用 class 创建对象。你只需要一个函数来调用吗?然后创建一个闭包。

https://stackoverflow.com/questions/71670779/

相关文章:

javascript - 如果其中没有图像, block 就会消失

python - 如何将变量插入文件路径?

r - 将一列拆分为两列 : dataframes within a list

css - TailwindCSS : is it possible to remove a box

rust - 为什么不可变结构在移入向量时会变为可变结构?

r - 根据字符串匹配过滤列表

rust - 为什么在堆栈中分配的值不会导致双自由指针?

node.js - 连接 redis 时在 docker-compose 中出现错误 : conne

css - 在 RMarkdown 中,如何以 block 的形式获取 css 文件?

flutter - 如何在 Flutter App 上设置自定义图片图标?使用应用图标