如何在Javascript中使用DOJO创建静态类

3
我正在尝试在JavaScript中创建一个实用程序类,并使用Dojo框架。我在这里找不到有关如何在Dojo框架内正确创建静态类的任何信息。我不想每次都创建一个新的Utility对象。我也不想使用Singleton。
我目前有类似以下的代码...
//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而不是旧代码


你对使用单例模式有什么不喜欢的地方? - lintmouse
我想使用类似于java.util.Math的这个类,以便可以轻松地在许多不同的上下文中调用它。我也不存储任何状态,并希望获得其性能/内存的好处而不是单例模式。此类中使用的所有方法也将是静态的。就此类而言,使用静态类比使用单例更有意义。我并不严格反对单例模式,只是在这种情况下希望它是一个静态类。 - Programmer
做类似这样的事怎么样?http://www.benlesh.com/2012/05/javascript-fun-part-3-implementing.html - lintmouse
由于使用Dojo Toolkit,我不能用我迄今尝试过的方法创建一个类(从中创建) 。我在上面的示例中使用的实现是我所卡住的。这就是为什么我正在寻找一种使用Dojo创建静态类的方法。只是还不确定如何做... - Programmer
你的代码有什么问题吗?请注意,JS中没有类,也没有“静态”类。 - Bergi
1个回答

6

正如其中一条评论中所提到的,你根本不需要使用“class”来完成你所要求的操作。这是 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即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接