메소드를 속성으로 정의한 어떠한 객체
를 가리키는 키워드
어떠한 객체의 속성으로 정의된 함수
cosnt obj = {
key1: 'value1',
key2: 'value2',
getKeys: function() {
return [this.key1, this.key2]
}
}
위 객체를 예로 든다면,
getKeys
는 객체 obj의 속성으로 정의된 함수인 메소드이다.
obj.getKeys()
와 같은 형태로 사용(호출)할 수 있죠.
전역 변수에 선언한 함수도 웹페이지에서
window
객체의 속성으로 정의된 함수라고 할 수 있습니다.
window. 접두사
없이도 참조가 가능하기 때문에 생략하고 쓰는 것뿐입니다. (window.foo()라고 사용해도 됩니다)this
입니다.let obj = {
getObj: function(){ return this }
}
console.log(obj.key() === obj) // true
obj
객체 안에 getObj
메서드를 선언하고, this
를 반환했을 때
obj.foo() === obj
이라는 코드에 true라고 반환할 것입니다.
this는 함수의 호출에 따라서 값이 달라지기도 합니다. (apply나 call, bind에 대해서는 하단의 학습자료를 통해 더 공부해 보세요.)
그러나 화살표 함수는 자신의 this가 없습니다.
화살표 함수에서의 this는 자신을 감싼 정적 범위(lexical context)입니다. (전역에서는 전역 객체를 가리킵니다.)
일반 변수 조회 규칙(normal variable lookup rules)을 따르기 때문에, 현재 범위에서 존재하지 않는 this를 찾을 때, 화살표 함수 바로 바깥 범위에서 this를 찾습니다.
그렇기에 화살표 함수를 사용할 때, 이러한 특이점을 생각하고 사용해야 합니다.