Задать вопрос

Есть ли ляпы в коде?

Добрый день. Написал первый плагин jQuery для работы с таблицами.

pastebin.com/iigURNnM

DDtlKFT.png

Посмотрите пожалуйста, есть ли ляпы в коде, ошибки очевидные? М.б. можно улучшить код? Спасибо.
  • Вопрос задан
  • 1695 просмотров
Подписаться 6 Оценить Комментировать
Решения вопроса 2
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Комментарии в коде бесполезные, только глаза мозолят:
index: function (settings) {
    // Метод контроллера index
....
create: function (settings) {
    // Метод контроллера create
....

Если уж вы описываете свой код - делайте это с умом, посмотрите какие есть средства для генерации документации, например JSDoc

Используйте фигурные скобки и отступы везде, где только можно. Я, разумеется, понимаю, что "стильно модно молодежно" писать if в одну строку, но такого рода конструкции взрывают мозг:
....
else data = settings;
if (typeof data !== "string") data = $.param(data);
if (method == 'post') return $.post(url, data + '&_method=' + method_hidden);
else return $.get(url, data);
....

И, если еще придираться, - пустые строки после объявления переменных, после if/else, и.т.д. улучшают читабельность.

Не используйте ключевые слова из es6 где попало:
class: '.jsgrid-container',

Есть некоторая непоследовательность - иногда вы выносите объявления всех переменных в начало функции, иногда нет. Имеет смысл определиться и использовать что-то одно.

Да, и киньте ссылку на codepen что-ли, а то в 500 строк кода ни разу не понятно работает ли там что-то (и что оно вообще делает). И к этому хочется добавить - посмотрите в сторону систем сборки (Grunt/Gulp/...)на ваш вкус - скорее всего эти 500 строк можно разбить на части поменьше, станет проще ориентироваться в происходящем.
Ответ написан
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Одна логическая ошибка в коде точно есть. Объясню ее на примере.

function setHandler(el){

   var obj = new MyController(el);

  $(el).on("click", function hand(){
      alert(obj.name);
  });

}

setHandler(element1);
setHandler(element2);


После выполнения данного кода в память браузера попадают:
  • Функция setHandler
  • Два объекта типа MyController
  • Две функции hand - обработчики события onclick.


Да-да, для каждого вызова setHandler создается своя функция hand. Две (три, десять или даже миллион) разные функции с одинаковым телом. Все, что их отличает - область видимости, в которой они объявлены (к примеру, внутри каждой из них доступен свой obj).

Но, спрашивается, как мы можем оптимизировать потребление памяти в данной ситуации? А вот так:

function hand(){

  var obj = $(this).data("obj");

  alert(obj.name);

}

function setHandler(el){

   var obj = new MyController(el);

  $(el)
    .data("obj", obj) //Как вариант
    .on("click", hand)
  ;

}

setHandler(element1);
setHandler(element2);

Вынесем hand в более высокую область видимости.

Теперь в памяти сохранены:
  • Функция setHandler
  • Функция hand
  • Два объекта MyController
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы