고리타분한 개발자
함수 (Function) - this 의 동작원리 본문
다른 프로그래밍 언어에서 this가 가리키는 것과 Javascript에서 this가 가리키는 것과는 좀 다릅니다. this가 가리킬 수 있는 객체는 정확히 5종류입니다.
함정
this가 Global 객체를 가리키는 것도 잘못 설계된 부분 중 하나입니다.
test에서 this가 Monkey를 가리킬 것으로 생각이 들지만 실제로는 그렇지 않습니다. test에서 Monkey에 접근하려면 method에 Local변수를 하나 만들고 Monkey를 가리키게 하여야 합니다.
self는 통상적인 변수 이름이지만, 바깥쪽의 this를 참조하기 위해 일반적으로 사용됩니다. 또한, 클로저와 결합하여 this의 값을 주고받는 용도로 사용할 수도 있습니다.
위와같이 bind 메서드를 사용하여 같은 결과를 얻을 수도 있습니다.
Method 할당하기
Javascript의 또다른 함정은 바로 함수의 별칭을 만들 수 없다는 점입니다. 별칭을 만들기 위해서 메소드를 변수에 넣으면 자바스크립트는 별칭을 만들지 않고 바로 할당해 버립니다.
첫번째 코드로 인해 이제 test는 다른 함수와 똑같이 동작합니다. 그래서, test 함수 내부의 this도 더이상 someObject를 가리키지 않습니다. 이렇게 this를 늦게 바인딩해서 나타나는 약점 때문에 늦은 바인딩이 나쁜것이라 생각이 되어질 수도 있지만, 이런 특징으로 인해 프로토타입 상속이 가능해 집니다.
Animal 인스턴스에서 method를 호출하면 method에서 this는 바로 그 인스턴스를 가리킵니다.
License
이 게시글은 JavaScript Garden을 참고하여 작성 되었습니다. (https://github.com/BonsaiDen/JavaScript-Garden)
'JavaScript > Garden' 카테고리의 다른 글
함수 (Function) - arguments 객체 (0) | 2017.11.10 |
---|---|
함수 (Function) - 클로저와 참조 (Closures and References) (0) | 2017.11.10 |
함수 (Function) - 함수 선언과 표현식 (Function Declarations and Expressions) (0) | 2017.11.09 |
객체 (Objects) - for in Loop (0) | 2017.11.09 |
객체 (Objects) - hasOwnProperty (0) | 2017.11.08 |