【问题标题】:Is there any advantage to using Classes with static functions versus Modules?使用具有静态函数的类与模块相比有什么优势吗?
【发布时间】:2012-11-08 05:45:08
【问题描述】:

我想要一些建议。我正在使用打字稿来创建对话框。一旦创建,他们就会照顾好自己,因为他们有自己的提交按钮并在那里进行自己的检查。

以下两种编码方式有什么优点或缺点吗?到目前为止,我唯一能看到的是带有导出的模块方法允许我隐藏一个函数并在我不导出它时将其设为私有。当我使用 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) {

            ...
        }
    }
}

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    模块方法更适合您想要实现的目标。

    如果使用类形式,您实际上是在定义一个构造函数,即使您永远不会新建对象实例,并且直接在构造函数上添加不能真正私有的成员(如您所见)。

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

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

    【讨论】:

    • 我尝试使用模块来实现这一点,但是当模块位于多个文件中时出现问题。每个模块中的每个函数都被放入每个 .js 文件中。你能看看我后来的问题,如果你能想到一个解决方案,请告诉我。
    猜你喜欢
    • 2018-02-19
    • 2012-05-02
    • 2015-07-20
    • 2012-04-15
    • 2018-10-08
    • 2012-12-09
    • 2010-09-24
    • 2010-12-27
    • 2015-04-06
    相关资源
    最近更新 更多