2015-08-03 4 views
3

Я пытаюсь создать класс Utility в JavaScript и использую инфраструктуру Dojo. Я не могу найти здесь нигде о том, как правильно создать статический класс в рамках Dojo. Я не хочу каждый раз создавать новый объект Utility. Я бы предпочел не использовать Синглтон.Как создать статический класс с использованием DOJO в Javascript

настоящее время у меня что-то вроде этого ...

//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 не унаследованного кода

+0

Что вам не нравится в использовании синглтона? – lintmouse

+0

Я хотел бы использовать этот класс, похожий на java.util.Math, в котором он может быть вызван в разных контекстах. Я также не храню какие-либо состояния и хотел бы использовать его производительность/память за одноэлемент. Все методы, используемые в этом классе, также будут статичными. Для всех целей и задач этого класса имеет смысл использовать статический класс, а не синглтон. Я не строго против одиночных игр, я бы просто хотел, чтобы это был статический класс в этом случае. – Programmer

+0

Как сделать что-то подобное? http://www.benlesh.com/2012/05/javascript-fun-part-3-implementing.html – lintmouse

ответ

6

Как упоминалось в одном из комментариев, вам не нужен «класс «вообще делать то, что вы просите. Это JavaScript, а не Java или C# или т. Д.

Вам просто нужно определить модуль, который возвращает объект с функциями утилиты.

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

Это очень обычная практика, даже занятая самой Додзё коммунальных модулей, такие как dojo/_base/array, dojo/_base/lang и dojo/date.

Это также не создает новый объект каждый раз, так как каждый модуль AMD загружается только один раз, а его заводская функция выполняется только один раз.

Dojo - это инструментарий, а не каркас и, как правило, никогда не заставляет вас что-то делать определенным образом. Не увлекайтесь мыслью, что каждый модуль, который вы когда-либо создавали, должен быть «классом», используя declare. Используйте declare, когда вам нужно определить конструктор или mixin с возможностями наследования.

Смежные вопросы