본문 바로가기
JavaScript

JavaScript this와 체이닝

by 하이방가루 2022. 2. 10.
728x90
반응형

this는 함수가 호출될 때 사용된 객체를 나타낸다.

객체 내의 함수인 메서드를 사용할 때 this를 사용하여 메서드가 자신을 포함하는 객체에 접근할 수 있다.

자바스크립트의 this는 다른 프로그래밍 언어의 this와 다르게 모든 함수에 this를 사용할 수 있다. 그래서 엄격 모드가 아닐 때는 this가 전역 객체를 참조하기도 한다. 브라우저 환경에선 window라는 전역 객체를 참조하게 된다.

function makeUser() {
  return {
    name: "Jack",
    ref: this
  };
};

let user = makeUser();  // 이 때 makeUser()함수가 호출되면서 this가 값을 참조함.

alert( user.ref.name ); // Error: Cannot read property 'name' of undefined

따라서 위에 에러가 발생하지 않게 하려면 

function makeUser() {
  return {
    name: "Jack",
    ref() {
      return this;
    }
  };
};

let user = makeUser();

alert( user.ref().name ); // 이제 이때 ref()함수가 호출될 때 this가 값을 참조하여 user객체 전체를 참조함.

위와 같이 객체 전체를 참조하여 반환하게 함으로 써 메서드를 연이어 호출할 수 있는데

이를 체이닝이라고 한다.

let ladder = {
  step: 0,
  up() {
    this.step++;
    return this;
  },
  down() {
    this.step--;
    return this;
  },
  showStep() {
    alert( this.step );
    return this;
  }
}

ladder
  .up()
  .up()
  .down()
  .up()
  .down()
  .showStep(); // 1 이어서 써도 되지만 가독성을 위해 별도의 줄에 작성하면 좋다.

// ex) ladder.up().up().down().up().down().showStep(); 이렇게 해도 무방함.
728x90
반응형

'JavaScript' 카테고리의 다른 글

JavaScript 객체의 형변환  (0) 2022.02.25
JavaScript 심볼형  (0) 2022.02.14
JavaScript 가비지 컬렉션  (0) 2022.02.10
JavaScript 객체의 동작방식  (0) 2022.02.10
JavaScript break/continue와 레이블  (0) 2022.01.20

댓글