ФорумПрограммированиеJavaScript → Инстанцирование класса с последовательным уточнением.

Инстанцирование класса с последовательным уточнением.

  • AndryG

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 18 января 2013 г. 8:28

    Имею картинку, у которой атрибутами указано, что надо делать при клике на ней
    удалить
    <img action=&quot;remove&quot;>

    Использовать. Дополительно запросить текст
    <img action=&quot;use&quot; use-input=&quot;text&quot;>

    Использовать. Дополительно запросить логин
    <img action=&quot;use&quot; use-input=&quot;user&quot;>


    Дальше юзаем шаблон Команда.
    Кучка классов с общим методом execute() и статичный метод прародителя, который инстанцирует нужный класс и запускает тот самый execute().

    дерево классов-исполнителей сечас такое:
    taAction
     | - taRemove
     | - taUse
           | - tauText
           | - tauUser

    Проблема состоит в едином методе инстанцирования, который разбирает и &quot;что делать&quot; и &quot;что дополнительно запрашивать&quot;.
    Хотелось бы разделить логику, чтобы в случае action=&quot;use&quot; именно класс taUse решал, какой объект создавать.

    Мысль была сделать это в taUse.execute(). Пусть он вместо выполнения конкретной работы создает ещё один класс и вызывает его execute().
    Коряво это, как по мне.

    Вот текущий вариант:
    taAction.action = function(el){
     try{
       var tmp = $(el).data(&#39;action&#39;);
       if(&#39;Use&#39; == tmp){ // уточнение класса
         tmp = (&#39;u-&#39; + $(el).data(&#39;use-input&#39;)).replace(/\-([\w])/g, function(str, p1, offset, s){
           return p1.toUpperCase();
         });
       }
       tmp = new window[&#39;ta&#39; + tmp](el);
       if(tmp){
         tmp.start();
       }else{
         throw new Error(&#39;Произошла ошибка.&#39;);
       }
     }catch(e){
       alert(&#39;Error! &#39;+e.message);
     }  
    }

  • lolcat

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 21 января 2013 г. 19:16, спустя 3 дня 10 часов 48 минут

    Функции-конструкторы, возвращающие объекты должны именоваться с большой буквы.
    HTML ноды с нестандартными атрибутами - не лучшее решение.


    А вообще на JS так писать не нужно. В JS нет классов. Зато в нем прототипное наследование, функции и замыкания. Оператор new в JS оставлен по недосмотру.

    Рекомендую быстренько изучить брошюру Javascript: Good Parts - книжка тонкая, но очень полезная. Мозги на место поставит.
  • Josh

    Сообщения: 2009 Репутация: N Группа: Кто попало

    Spritz 22 января 2013 г. 3:49, спустя 8 часов 33 минуты 12 секунд

    HTML ноды с нестандартными атрибутами - не лучшее решение.

    data-action = &#39;use&#39; а потом $(&#39;#obj_id&#39;).data(&#39;action&#39;); зачем придумали?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!