Как определить переменную, доступную из всех методов класса?

#javascript #stimulusjs

#javascript #stimulusjs

Вопрос:

Я новичок в JavaScript и, вероятно, пытаюсь эмулировать Ruby с помощью этого. Я использую StimulusJS, но я думаю, что вопрос применим к JS в целом.

Моя цель — запустить метод (при нажатии кнопки), который будет извлекать и отображать все подкатегории категории с помощью кнопки. Метод / функция сначала извлекает данные, а затем управляет DOM. Я хотел разделить их на два метода, но когда я вызываю другой метод ( displaySubcategories ) из первого ( getSubcategories ), значение event изменяется. То же самое с this in the fetch block — мне нужно сначала назначить ее self , чтобы позже можно было связать с самим объектом.

Есть ли лучший способ сделать это? Как переменные, доступные для всех методов (переменные экземпляра в Ruby)? Или я вообще не должен разделять их на две функции (не JS way)?

 import {Controller} from "stimulus"

export default class extends Controller {
  static targets = ["categoryId", "categoryLabel", "subcategoryList", "subcategoryHeader"]

  getSubcategories() {
    let category_id = event.target.firstElementChild.value
    let url = "/api/categories/"   category_id   "/subcategories?levels=1"
    let self = this
    let e = event

    fetch(url)
      .then(response => response.json())
      .then(json_response => {
        self.displaySubcategories(json_response, e)
      })
  }

  displaySubcategories(json_response, event) {
        subcategories.forEach(function (subcategory) {
          let category_label_copy = this.cloneLabel(current_label, subcategory)
          current_label.classList.add("chosen")
          subcategory_list.appendChild(category_label_copy)
        }, this)
  }
}


 

расходы#getSubcategories»>

 
 

Комментарии:

1. Это getSubcategories метод объекта или независимая функция? Если первое, не могли бы вы показать весь соответствующий код?

2. Это метод объекта. Есть только второй метод ( displaySubcategories ), который еще не готов, так как я перестал думать о том, как мне его структурировать. Однако это общий вопрос — если я хочу использовать event — нужно ли мне передавать его из метода в метод? Доступна ли она только в первом вызванном методе и не может быть назначена какой-либо переменной, доступной также из других методов?

3. Я просто хочу более подробно изучить ваш объект. Является ли она экземпляром класса или создается с помощью объектного литерала?

4. И КСТАТИ, поскольку вы используете функции со стрелками, у вас не должно возникнуть проблем с this ключевым словом, нет необходимости хранить его в другой переменной ( self в вашем случае)

5. this.foobar = 1 — это присваивание значения «переменной экземпляра» (когда внутри нестатического метода класса), в чем проблема? Вам нужно прочитать об анатомии классов в JavaScript. Кроме того, я комментирую, потому что мои комментарии не являются ответом на ваш вопрос, поскольку я нахожу ваш вопрос расплывчатым и / или субъективным (однозначного ответа нет). Если вы уточните, что вам нужно, в вопросе, возможно, кто-то, включая меня, может дать достойный ответ.