메서드 와 ‘this’
메서드와 ‘this’
객체는 실제 존재하는 개체 표현하고자 할 때 생성
JS 에선 객체 프로퍼티에 함수 할당 가능
-
메서드 만들기
함수 표현식으로 객체 프로퍼티에 함수 할당 가능 객체 프로퍼티에 할당된 함수를 메서드(method) 라 부름
-
객체 지향 프로그래밍
객체를 사용하여 개체를 표현하는 방식
올바른 객체 선택법, 객체 사이의 상호작용을 나타내는 방법 등에 대한 의사 결정은 객체 지향 설계 기반
-
메서드 단축 구문
function 생략하고 메서드 정의 가능
객체 상속과 관련된 미묘한 차이 존재
-
메서드와 ‘this’
메서드가 객체에 저장된 정보에 접근할 때 사용
‘점 앞’ 의 this는 메서드를 호출할 때 사용된 객체 나타냄
-
자유로운 “this”
JS 의 this 는 다른 프로그래밍 언어와 동작 방식 다름
this 값은 런타임 에 결정 (컨텍스트에 따라 다름)
동일한 함수라도 다른 객체에서 호출 시 ‘this’ 참조 값 달라짐
-
객체 없이 호출하기 : this == undefined
엄격 모드에서 객체 없이 호출 시 this 는 undefined
엄격 모드 아닐 시 this 는 전역 객체 참조
-
자유로운 this 가 만드는 결과
다른 언어의 this 는 항상 메서드가 정의된 객체 참조 ‘bound this’
JS 는 런타임에 결정. 메서드 정의된 곳 상관 없이 this 는 ‘점 앞의’ 객체가 무엇인가에 따라 ‘자유롭게’ 결정
-
‘this’ 가 없는 화살표 함수
화살표 함수는 ‘고유햔’ this 가지지 않음
화살표 함수에서 this 참조 시 화살표 함수가 아닌 ‘평범한’ 외부 함수에서 this 값 가져옴
별개의 this 만들어지는 것 원하지 않고 외부 컨텍스트에 있는 this 이용하고 싶을 시 유용.
요약
-
객체 프로퍼티에 저장된 함수를 ‘메서드’
-
메서드는 this 로 호출할 때 사용된 객체 참조
-
this 는 런타임에 결정
-
함수 선언 시 this 사용 가능하지만 함수 호출되기 전까지 this 엔 값 할당 안 됨
-
함수 복사해서 객체 간 전달 가능(this 로 객체 할당)
-
this 는 점 앞의 객체 참조
-
this 에 해당하는 객체 없을 시 this는 엄격모드에서는 undefined, 일반 모드에서는 전역 객체 참조
-
화살표 함수는 자신만의 this 가지지 않음
-
함수 선언 시 고유한 this 를 가지게 됨