스터디스터디
98
2021-04-29 01:08:31
2
118

JS class 간단한 질문 부탁드립니다..


이제 막 JS class를 공부하는 코린이 입니다. ㅠㅠ

이제 class 내에서 변수 선언이 가능하다고 들었습니다.

근데 App.js의 constructor 에서 this를 통해 $target을 바인딩을 하는데

왜 constructor 앞 부분에 $target을 또 선언한건가요??

번외로 변수 앞에 $를 붙이는 이유는 무엇인가요? DOM임을 표시하려고 붙이는 건가요?

아직 개념이 부족해서 질문 자체가 이상할 수도 있습니다 ㅠㅠ 


// main.js
new App(document.querySelector("#App"));


// App.js
class App {
  // 왜 선언한거지 ?
  $target = null;
  data = [];

  // $target은 App DOM을 가리킴.
  constructor($target) {
    this.$target = $target;

    this.searchInput = new SearchInput({
      $target,
      onSearch: (keyword=> {
        api.fetchCats(keyword).then(({ data }) => this.setState(data));
      },
    });
0
  • 답변 2

  • 나도아빠다
    2k
    2021-04-29 02:02:23

    constructor에서 바로 생성시키는것과 동작자체는 비슷하지만, 

    constructor 내에서 바로 필드를 생성해버리는 것과 다르게

    상단에 필드를 선언하고 constructor에서 해당 필드에 값을 주입하겠다고 선언해 주는거니

    이후 클래스가 복잡해져도 공용 필드를 constructor 내에서 찾을 필요없이 constructor상단에 선언된 필드만 보면 알 수 있게 되는 장점이 있습니다.

    또 필드가 주어지면 getter, setter를 명시적으로 쓸수 있게 되고,

    #을 이용한 private field 전환 등 쓸만한 요소가 많습니다.


    $는 jquery때 부터 였던거 같은데.. 여튼 말씀하신대로 DOM변수 선언 시에 시작값으로 $로 표기하는 경우가 왕왕 있었습니다.  필수라기 보단 구분 용으로 보시면 될듯하네용

  • 스터디스터디
    98
    2021-04-29 23:58:09

    아하 감사합니다. 많은 도움 되었습니다 !!

  • 로그인을 하시면 답변을 등록할 수 있습니다.