Важные 5 вещей, когда вы кодируете JavaScript.

В последнее время я много раз кодировал JS. Я думаю, что есть 5 вещей, чтобы написать чистый JS-код. На этот раз я обобщил их.

1. Не забывайте «var» перед ценным.

Это настолько очевидное правило. Если вы определяете ценность без этого, эта ценность является глобальной. К сожалению, вы можете вставить значение в value без «var». Иногда мы забываем этот важный код. В любом случае, пишите код много раз и старайтесь не забывать его писать.

2. Меньше аргументов.

Если в логике много аргументов, этот код грязный. Конечно, иногда нельзя не добавить аргументов к логике, но таких возможностей должно быть меньше. Например….

Class example{
  method A(){
   omission
   return c, d
  }
  method B(){
   omission
   return e, f
  }
  method C(c, d, e, f){
   c~
   d~
   e~
   f~
  }
 method A()
 method B() 
 method C(c, d)
 method C(e)
}

MethodA и B возвращают c, d, e, f. И метод Cuse с этими аргументами. Метод C имеет логику, которая имеет дело с этими аргументами. Но когда вызывается метод C, ему не всегда нужны все аргументы. В этом случае для метода C будет пустой тратой времени иметь 4 аргумента. Чтобы этого избежать, вызовите метод A в методе C и вставьте возврат в value и используйте его. Таким образом, вы можете уменьшить аргументы.

3. Отделите коды для управления DOM от логических кодов.

Это можно применить ко многим языкам. Логика и представление должны быть разделены. Когда возникает ошибка, вы можете легко найти, где она происходит. Итак, существуют ли индексы, подтверждающие, что ваш код может разделить логику и представление? Один из них: есть ли в вашем логическом коде элементы html или нет?

constructor($root) {
    this.$root = $root
    this.displaySlider()
    this.$slideWrap = this.$root.find(".slideWrap")
    this.$leftButton = this.$root.find(".left_button")
    this.$rightButton = this.$root.find(".right_button")
    this.$slides = this.$slideWrap.find(".color_slide")
    this.activeSlideIndex = this.$slideWrap.find('.color_slide.active').index()
    this.firstNum = 0
    this.nextNum = 1
    this.lastNum = 2
    this.hundleEvent()
}
hundleEvent(){
    var self = this
    this.$leftButton.on("click", function(){
      self.changeLeftSlide()
    })
}
selectLeftSlide(){
    if (this.activeSlideIndex > this.firstNum) {
      this.activeSlideIndex -= this.nextNum
      return this.activeSlideIndex
    }
    if (this.activeSlideIndex === this.firstNum) {
      this.activeSlideIndex += this.lastNum
      return this.activeSlideIndex
    }
}

Пример выше. Метод hundleEvent() управляет DOM, selectLeftSlide() отвечает за логику. В то время как selectLeftSlide() не имеет html-элементов, hundleEvent() имеет html-элементы ($leftButton). Логика и представление разделены.

4. Один метод — одна роль

Пример ниже.

class Slider {
  constructor($root) {
    this.$root = $root
    this.slides = ["https://fakeimg.pl/250x100/FF0000/", "https://fakeimg.pl/250x100/00FF00/", "https://fakeimg.pl/250x100/0000FF/"]
    this.displaySlider()
    this.$slideWrap = this.$root.find(".slideWrap")
    this.$leftButton = this.$root.find(".left_button")
    this.$rightButton = this.$root.find(".right_button")
    this.$slides = this.$slideWrap.find(".color_slide")
    this.activeSlideIndex = this.$slideWrap.find('.color_slide.active').index()
    this.firstNum = 0
    this.nextNum = 1
    this.lastNum = 2
    this.hundleEvent()
  }
createTemplate(){
    return $("<div class='slideWrap'></div>")
  }
createButtons(){
    return $("<button class ='left_button'>left</button><button class ='right_button'>right</button>")
  }
  createSlides(){
    var $template = this.createTemplate()
    var $slides = ""
    $.each(this.slides, function(index, slide){
      $slides += `<img src=${slide} class="color_slide">`
    })
    $template.append($slides)
    return $template
  }
  displaySlider() {
    var $template = this.createSlides()
    var $buttons = this.createButtons()
    this.$root.html($template)
    this.$root.find(".slideWrap").after($buttons)
    this.$root.find(".color_slide").eq(0).addClass("active")
  }
  hundleEvent(){
    var self = this
    this.$leftButton.on("click", function(){
      self.changeLeftSlide()
    })
    this.$rightButton.on("click", function(){
      self.changeRightSlide()
    })
  }
  selectRightSlide(){
    if (this.activeSlideIndex < this.lastNum) {
      this.activeSlideIndex += this.nextNum
      return this.activeSlideIndex
    }
    if (this.activeSlideIndex === this.lastNum) {
      this.activeSlideIndex -= this.lastNum
      return this.activeSlideIndex
    }
  }
  selectLeftSlide(){
    if (this.activeSlideIndex > this.firstNum) {
      this.activeSlideIndex -= this.nextNum
      return this.activeSlideIndex
    }
    if (this.activeSlideIndex === this.firstNum) {
      this.activeSlideIndex += this.lastNum
      return this.activeSlideIndex
    }
  }
  changeRightSlide() {
    var i = this.selectRightSlide()
    this.$slides.removeClass("active")
    this.$slides.eq(i).addClass("active")
  }
  changeLeftSlide() {
    var i = this.selectLeftSlide()
    this.$slides.removeClass("active")
    this.$slides.eq(i).addClass("active")
  }
}
new Slider($(".slider"))

У одного метода не должно быть много функций. В этом случае функции разбросаны. Все методы не делают больше, чем изображения имени метода.

5. Когда вы используете класс, один экземпляр равен корню, который является классом HTML.

<html>
  <head>
    <meta charset="utf-8">
    <title>slider</title>
    <link rel="stylesheet" type="text/css" href="slider.css">
  </head>
  <body>
    <div class = "slider">
    </div>
    <script src="jquery-3.3.1.min.js"></script>
    <script src="slider.js"></script>
  </body>
</html>

Этот html относится к JS выше. В данном случае root — это class="slider". Если вы делаете много ползунков, напишите class="slider". Этот «ползунок» является экземпляром.

Это базовые знания, но очень важные. Даже если изучаю более сложные вещи, я стараюсь их не забывать.