ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • this
    개발 지식/자바스크립트 2022. 7. 24. 14:02

    모던 자바스크립트(https://ko.javascript.info)를 참고로 하여 작성하였습니다.

     

    this 값은 런타임에 결정된다. 컨텍스트에 따라 달라지는 것이다.

    동일한 함수라도 다른 객체에서 호출했다면 'this’가 참조하는 값이 달라진다.

     

    다른 객체에서 동일한 함수를 메서드로 사용하였을 때

    this는 해당 객체를 의미한다.

    user.f = sayHi;
    admin.f = sayHi;

     

     

    let user = { name: "John" };
    let admin = { name: "Admin" };
    
    function sayHi() {
      alert( this.name );
    }
    
    // 별개의 객체에서 동일한 함수를 사용함
    user.f = sayHi;
    admin.f = sayHi;
    
    // 'this'는 '점(.) 앞의' 객체를 참조하기 때문에
    // this 값이 달라짐
    user.f(); // John  (this == user)
    admin.f(); // Admin  (this == admin)
    
    admin['f'](); // Admin (점과 대괄호는 동일하게 동작함)

     

    런타임에 의해 결정되는 this

    다른 언어를 사용하다 자바스크립트로 넘어온 개발자는 this를 혼동하기 쉽습니다. this는 항상 메서드가 정의된 객체를 참조할 것이라고 착각하죠. 이런 개념을 'bound this'라고 합니다. 자바스크립트에서 this는 런타임에 결정된다. 메서드가 어디서 정의되었는지에 상관없이 this는 ‘점 앞의’ 객체가 무엇인가에 따라 ‘자유롭게’ 결정된다.

     

    this가 없는 화살표함수

    화살표함수를 실행할 때, arrow()의 this는 sayHi()의 this가 된다. 별개의 this가 만들어지는 건 원하지 않고, 외부 컨텍스트에 있는 this를 이용하고 싶은 경우 화살표 함수가 유용하다.

     

    let user = {
      firstName: "보라",
      sayHi() {
        let arrow = () => alert(this.firstName);
        arrow();
      }
    };
    
    user.sayHi(); // 보라

    '개발 지식 > 자바스크립트' 카테고리의 다른 글

    new 연산자와 생성자 함수  (0) 2022.07.25
    참조에 의한 객체 복사  (0) 2022.07.23
    객체  (0) 2022.07.22
    화살표 함수 기본  (0) 2022.07.22
    형 변환  (0) 2022.07.22

    댓글

Designed by Tistory.