gpt4 book ai didi

javascript - 在 js 中使用类与创建独立函数有什么好处

转载 作者:行者123 更新时间:2023-12-04 19:25:19 25 4
gpt4 key购买 nike

我做了很多全栈的 JS 工作,在创建具有封装逻辑的文件时,我通常遵循这样的方法:

export const SOME_KEY_TO_STATE = 'some-key';
export const ANOTHER_KEY_TO_STATE = 'another-key';

let moduleState = {};

export function modifyState(someArg) {
// ... do some logic
// ... perhaps derive some new value based off of logic
const newValue = derivedNewValue;
moduleState[someKey] = newValue;
}

export function getSomeState(aKey) {
// ... do some sanity checking?
const initialValue = moduleState[aKey];

// ... calculate value based on some conditions?
const finalValue = calculatedValue;
return moduleState
}


我也偶尔使用类,它们基本上提供相同的结构,除了模块状态将作为实例变量在类内部,并且可能是那些导出常量的静态变量:
export default class SomeThing {
static SOME_KEY = '';

state = {};

modifyState(arg) { ... }
getSomeState() { ... }
}

我首选的方法是第一种方法,主要是因为我只能在代码的其他部分中导入我需要的内容,而不会让整个对象四处 float (以及它的状态和其他我可能不使用的方法<--这个陈述是否准确还是我完全关闭了?)。另外,如果我想在上下文中引用函数,我总是可以做 import { * as someName } from myModule
不过我很好奇,使用类而不是我概述的第一种方法是否有我不知道的好处?

最佳答案

let moduleState = {};


这是全局状态, which is best to be avoided .虽然它可能很好地封装在您的模块中,但它是一个静态变量,本质上是一个单例 - 它在整个应用程序中只存在一次,在加载模块时创建。

在某些情况下这可能是合适的,但总的来说 don't use singletons !

一个 class解决方案具有明显的优势,您可以在任何您想要的地方(例如测试)多次实例化它。因此,请务必了解这种差异,然后选择合适的模式。

I like the first one, primarily because I can import only what I need in other parts of the code without having an entire object floating around (along with it's state and other methods that I may not use)



这确实很离谱。你的应用程序中总是有完整的模块对象、状态和函数,它们并没有被优化掉。当然,当你不这样做时 import他们明确地不在你的范围内,但有一个 class可用的实例也没有真正的伤害。如果你不调用它的所有方法,就像没有从你的模块中导入所有函数一样。

调用普通函数或在对象上调用方法之间的语法差异实际上是一个小细节,不应影响您的决定。无论如何,您始终可以通过命名空间导入模块或解构对象来回避它。

关于javascript - 在 js 中使用类与创建独立函数有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com