О том, как создавать в javascript объекты, написано довольно много:
http://habrahabr.ru/blogs/javascript/48542/
http://habrahabr.ru/blogs/webdev/38642/
потому я не буду пересказывать здесь все заезженные способы, а лишь покажу собственную технику создания объектов-одиночек (синглтонов)..
итак, нам нужен объект, имеющий публичные и приватные свойства и методы.. так создадим таковой, используя замыкания:
var instance = (function(){
var public = {}, draw, some;
draw = public.draw = function(){
// делаем что-нибудь..
};
some = function(){
// делаем что-нибудь
};
return public;
})();
...
instance.draw();
здесь создается объект instance, у которого есть приватный метод some() и публичный метод draw()..
как видно, нет ничего сложного в объялении свойств и методов: и публичные, и приватные свойства и методы объявляются внутри функции-обертки..
разница лишь в том, что публичные свойства и методы мы дублируем в переменную public, которая будет отдана объекту..
некоторые спросят: а зачем вообще нужны синглтоны, зачем нужна инкапсуляция?
понимание необходимости рассмотрим на бытовом примере..
например, нужен онлайн-калькулятор чего-нибудь, калькулятор должен:
-- считать что-нибудь,
-- хранить промежочные значения чего-нибудь,
-- хранить параметры отображения, настройки и т.п. служебную информацию..
если подумать логически.. ведь будет очень удобно, если все данные (свойства) будут хранится в одном месте (объекте), и будет не менее удобно, если весь функционал (методы) будут хранится там же.. содержание данных и функционала в одном объекте улучшает понимание и упрощает разработку модели.. и к тому же это не засоряет глобальный name space..
итак, что нужно для создания объекта?.. очевидно, класс, фабрика объектов.. а сколько объектов класса у нас в принципе будет? очевидно, только один -- ведь зачем нам 10 калькуляторов на странице?.. тогда очевидно, что паттерн программирования синглтон тут окажется как никак кстати.. :-)
инкапсуляция (сокрытие) данных нам тоже очень пригодится, чтобы сторонние скрипты не имели доступа к служебной информации и данным нашего калькулятора..