Оформление класса
Доброго всем.
Скажу сразу, я не яваскрипт-программист и этот пост для продвинутых программистов не о чем не говорит. Раньше делал функционал не особо заморачиваясь ООП. Короче стал заявляться на вакансию яваскрипт-программиста в одну компанию. Они как положено дали мне тестовое задание сделать некий компонент. После написания основного функционала я решил оформить класс вот таким образом:
var AnyComponent = function () {
var proto = {
// вот такой конструктор объектов
constructor:function (oConf) {
for (var i in proto) {this[i] = proto[i];}
for (var i in oConf) {this[i] = oConf[i];}
},
default : {//значения по умолчанию для всех объектов
attributeA : ...,
attributeB : ..,
...
},
//методы
methodA : function(...) {...},
methodB : function(...) {...},
...
};
return proto.constructor;
}();//важны круглые скобочки
В методах использование установленных свойств объектов или соответствующими значениями по умолчанию следующим образом:
... this.attributeA || this.default.attributeA ...
Такое использование дефолтных значений не позволяет раскидывать их по всем объектам, а брать их из одного места.
В методах объект доступен как обычно через this. Но что делать, когда нужно использовать интерфейсные события и там this указывает не на наш объект. Добавим замыкание в конструкторе:
constructor : function (oConf) {
for (var i in proto) {this[i] = proto[i];}
for (var i in oConf) {this[i] = oConf[i];}
var oThis = this; // полезное замыкание объекта, там где this другой (интерфейсные события)
// событийные обработчики только здесь, чтобы видеть oThis
this.onEventA = function () {/* объект доступен через oThis*/};
...
},
Такое оформление компонента/класса не проверялось на предмет корректности применения в различных IDE.
|
Всё бы нечего, но если придётся постоянно создавать обьекты ,
то для каждого обьекта будет выполняться цикл копирования свойств в this из proto, а это потеря скорости.
В большинстве случаев задержка не критична, но она всё таки есть.
Прототипы могли бы быть более удачным решением чем копирование.
Да, прототипы это классика. Просто захотелось оформить класс в одних фигурных скобках )
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.