Реализовать статический класс в js очень просто, это будет простой объект:
var obj = { field: 'value', fnTest: function(){ return 'res: '+ this.field; } }; // Использование: console.log( obj.field ); // 'value' console.log( obj.fnTest() ); // 'res: value'Если нам нужна предварительная инициализация, то добавим некий метод init, который может устанавливать значение полей объекта:
var obj = { field: 'value', options: {}, init: function(o){ this.options = $.extend(true, {}, o); }, fnTest: function(){ return this.field; } }; // Использование: obj.init({o:4,test:2}); console.log( obj.options ); //{o:4,test:2}Этого функционала, в большинстве случаев, должно хватить, но бывает нужен и синглетон (Singleton): например важно иметь приватные данный и методы (статический класс полностью публичен) Один из демонстрационных вариантов реализации синглетона :
var cSingleton = (function(){ // Class instance: var _instance = null; // Private: var test = 1; var options = {}; var fnPrivate = function(){ // some code } // Constructor: function Init(o){ options = $.extend(true, options, o || {}); } // Public: Init.prototype = { pub: 0, fnTest: function(){ return test; }, getOptions: function(){ return options; } } return function(args){ if(!_instance){ _instance = new Init(args); } return _instance; } }()); ob = new cSingleton({x:1}); console.log('1:', ob.fnTest()); console.log('opts:', ob.getOptions()); ob2 = new cSingleton({x:2}); console.log('2:', ob2.fnTest()); console.log('opts:', ob.getOptions()); // Результат: 1: 1 opts: Object { x=1} 2: 1 opts: Object { x=1}Так мы гарантируем, что класс вернет только одно значение. Возможно это и "синтетическая" задача, но возможно кому-то и пригодиться
Комментариев нет:
Отправить комментарий