javascript - 与模块相比,使用具有静态函数的类有什么优势吗?

标签 javascript typescript

我想要一些建议。我正在使用 typescript 来创建对话框。一旦创建,它们就会自行处理,因为它们有自己的提交按钮并进行自己的检查。

以下两种编码方式有什么优点或缺点吗?到目前为止,我唯一能看到的是,带有导出的模块方法允许我隐藏一个函数,并在不导出它的情况下将其设为私有(private)。当我使用 static 并尝试使用 private 修饰符时,它会在智能感知中显示一个锁定图标,但仍然允许我使用它。

module Dialog {
    export class Modal {
        static createAccessModal(link: Link) {
            createModal(link);
        }
        static createAdminModal(link: Link) {
            link.Modal.MaxHeight = 600;
            link.Modal.Width = false;
            createModal(link);
        }
        static private createModal(link: Link) {

            ...
        }
    }
}

或者做:

module Dialog {
    export module Modal {
        export function createAccessModal(link: Link) {
            createModal(link);
        }
        export function createAdminModal(link: Link) {
            link.Modal.MaxHeight = 600;
            link.Modal.Width = false;
            createModal(link);
        }
        function createModal(link: Link) {

            ...
        }
    }
}

最佳答案

模块方法是您想要实现的目标的首选。

如果使用类形式,即使您永远不会更新对象实例,您也可以有效地定义构造函数,并直接在不能真正私有(private)的构造函数上添加成员(正如您所观察到的)。

使用模块方法,您只需构造一个对象,并且您不导出的成员包含在设置该对象的闭包中 - 为您提供真正的隐私。

查看两者效果的一个好方法是将每个代码粘贴到 http://www.typescriptlang.org/Playground/ 并分析生成的代码。

关于javascript - 与模块相比,使用具有静态函数的类有什么优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13468451/

相关文章:

匹配 '|' 且前面没有 '\' 的 JavaScript 正则表达式(lookbehind 替代方案)

javascript - 如何用正则表达式匹配0.05的倍数

javascript - 使用多个版本格式时的情况

javascript - 将 <Mutation> 改为 useMutation

typescript - 这是 TypeScript 箭头定义中的吗?

javascript - 如何使用 Angular js 动态更改按钮上的名称

javascript - 自动播放 Javascript 轮播,直到单击按钮

javascript - react 和 Bootstrap : component not rendering

javascript - node_modules/@types/react/index"' 没有默认导出

angular - 如何防止 Angular 加载组件两次?