【问题标题】:How do I create a static class using DOJO in Javascript如何在 Javascript 中使用 DOJO 创建静态类
【发布时间】:2015-08-03 19:46:54
【问题描述】:

我正在尝试在 JavaScript 中创建一个实用程序类,并且正在使用 Dojo 框架。我在这里找不到关于如何在 Dojo 框架中正确创建静态类的任何地方。我不想每次都创建一个新的 Utility 对象。我也不想使用单例。

我目前有这样的东西......

//Util.js

define(["dojo/_base/declare",
    "dojo/domReady!"], function (declare) {
        return declare(null, {
            //Pass in string format of element's ID
            clearTextBox: function (elemID) {
                document.getElementById(elemID).value = "";
            }
        });
    });

注意:我使用的是 AMD 而不是旧代码

【问题讨论】:

  • 你不喜欢使用单例的什么?
  • 我想使用类似于 java.util.Math 的这个类,它可以在许多不同的上下文中轻松调用。我也没有存储任何状态,并且希望它的性能/内存优于单例。此类中使用的所有方法也将是静态的。对于此类的所有意图和目的,使用静态类而不是单例更有意义。我并不严格反对单例,在这种情况下我只是希望它是一个静态类。
  • 由于使用了 Dojo 工具包,我无法真正以这种方式创建一个(根据我目前所尝试的方法)。我在上面的例子中使用的实现是我坚持的。这就是为什么我正在寻找一种使用 Dojo 创建静态类的方法。只是不确定如何...
  • 你所拥有的有什么问题?请注意,JS 中没有类,也没有“静态”类。

标签: javascript dojo static-classes


【解决方案1】:

正如其中一个 cmets 所提到的,您根本不需要“课程”来完成您的要求。这是 JavaScript,不是 Java 或 C# 等。

您只需要定义一个返回具有实用功能的对象的模块。

define([], function () {
    return {
        clearTextBox: function (id) {
            document.getElementById(id).value = '';
        }
    };
});

这是一种非常常见的做法,甚至 Dojo 本身也将其用于实用程序模块,例如 dojo/_base/arraydojo/_base/langdojo/date

这也不会每次都创建一个新对象,因为每个 AMD 模块只加载一次,其工厂函数只执行一次。

Dojo 是一个工具包,而不是一个框架,通常不会强迫您以某种方式做某事。不要误以为您创建的每个模块都需要成为使用declare 的“类”。当您需要定义具有继承功能的构造函数或 mixin 时,请使用 declare

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多