[자바스크립트] 질문있습니다

조회수 622회

안녕하세요

크롬 개발자도구 보다 궁금한점이 있어서 질문드립니다. 아래와 같은 경우 이미지

아래쪽과 같이 가끔 흐릿한 프로퍼티들이 있는데 이것이 무엇인지 궁금합니다.

실제로 children 경우 _children 도 있고 enabled 도 _enabled이 있는데

왜 흐릿하게 표현하고, 어떤 프로퍼티를 사용해야 하는지 궁금합니다..

감사합니다

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    저 흐리게 나타나는 건 보통 프로토타입과 그 안에 속한 메소드들이 그렇고요, 가장 쉽게 볼 수 있습니다.

    또 다른 경우로는 프로퍼티자체는 존재하는데 getter가 invoke되지 않은 상태를 나타내기도 합니다. 이 때에는 해당 (...)을 누르면 그때서야 getter를 호출하여 값을 가져와 노출시킵니다. 즉, getter를 따로 지정한 프로퍼티는 저렇게 나오는 거죠.

    • property에 get 키워드로 getter를 정의 하는 경우, 이 경우는 getter가 따로 흐릿하게 표시됩니다. 질문의 경우와는 다르긴 해요.
    let obj = {
      num: 1,
      get prop() {
        return this.num++;
      }
    };
    
    • 위의 방식과는 동작은 비슷하나 소소한 차이를 보이는게 definePropertygetter를 정의하는 경우입니다. 아마 질문에 첨부하신 스샷에서 보여지는 프로퍼티는 이렇게 정의되어 있을 가능성이 높아요.
    var o = {a: 0};
    Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });
    

    두 경우 모두 console에서 (...) 으로 표시되며 마우스로 이걸 클릭했을때 evaluation되어 출력됩니다.

    그래서 무얼 사용해야 되느냐... 흐음...

    문서에 나와있는거면 흐릿한거 그냥 사용해도 될 거에요.

    오히려 밑줄이 있는 것은 여기저기서 통용되는 컨벤션으로 봤을때, 클래스의 private와 같이 객체 내부에서만 사용한다는 것을 표시한 네이밍이거나 외부 노출을 꺼려하는 프로퍼티일 경우가 많거든요

    • 명쾌한 답변이네요!! 감사합니다 ~! 최진우 2019.5.6 22:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)