method와 this

·2023년 1월 21일
0

메서드(method)는 객체 프로퍼티에 할당된 함수 입니다.
객체의 프로퍼티에 함수를 할당해 객체에게 행동할 수 있는 능력을 부여해줍니다.

<script>
let user = {
  name: "John",
  age: 30
};

user.sayHi = function() {
  alert("안녕하세요!");
};

user.sayHi(); // 안녕하세요!
</script>
  • 함수 표현식으로 함수를 만들고, 객체 프로퍼티 user.sayHi에 함수를 할당해 주었습니다.
<script>
let user = {
  // ...
};

// 함수 선언
function sayHi() {
  alert("안녕하세요!");
};

// 선언된 함수를 메서드로 등록
user.sayHi = sayHi;

user.sayHi(); // 안녕하세요!
</script>
  • 이미 정의된 함수를 이용해서 만들 수도 있습니다.

메서드 단축 구문

<script>
// 아래 두 객체는 동일하게 동작합니다.

user = {
  sayHi: function() {
    alert("Hello");
  }
};

// 단축 구문. 그냥 객체 안에 함수 선언 방식으로 작성하면 된다.
user = {
  sayHi() { // "sayHi: function()"과 동일합니다.
    alert("Hello");
  }
};
</script>

메서드와 this

  1. 대부분의 메서드는 객체 프로퍼티의 값을 활용합니다.
  2. 메서드 내부에서 this 키워드를 사용하면 객체에 접근할 수 있습니다.
  3. 점 앞의 this는 메서드를 호출할 때 사용된 객체를 말합니다.
<script>
let user = {
  name: "John",
  age: 30,

  sayHi() {
    // 'this'는 '현재 객체'를 나타냅니다.
    alert(this.name);
  }

};

user.sayHi(); // John
</script>

화살표 함수에서의 this

  • 화살표 함수는 ‘고유한’ this를 가지지 않습니다.
  • 화살표 함수에서 this를 참조하면, 화살표 함수가 아닌 ‘평범한’ 외부 함수에서 this 값을 가져옵니다.
<script>
let user = {
  firstName: "보라",
  sayHi() { 
    let arrow = () => alert(this.firstName);
    arrow();
  }
};

user.sayHi(); // 보라
</script>
  • 함수 arrow()의 this는 외부 함수 user.sayHi()의 this가 됩니다.

this 값은 런타임에 결정됩니다.

  • 함수를 선언할 때 this를 사용할 수 있습니다.

  • this는 함수가 호출되기 전까지 값이 할당되지 않습니다.

  • 함수를 객체 프로퍼티에 저장해 object.method()같이 ‘메서드’ 형태로 호출하면 this는 object를 참조합니다.

  • 함수를 복사해 객체 간 전달할 수 있습니다.
    다만, 동일한 함수라도 다른 객체에서 호출했다면 'this’가 참조하는 값이 달라집니다.

<script>
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 (점과 대괄호는 동일하게 동작함)
</script>

profile
저녁놀 마을 사람

0개의 댓글

관련 채용 정보