this 가 쓰인 경우는 객체의 메소드와 일반 함수에서로 나뉜다.
1. 객체의 메소드에서 사용한 this 는 호출한 객체를 가리킨다.
var obj1 = { name : 'obj1', myfunc : function() { alert(this.name); } } var obj2 = { name : 'obj2', myfunc : obj1.myfunc } obj1.myfunc(); // obj1 obj2.myfunc(); // obj2
obj2.myfunc() 에서 myfunc()를 호출한 객체가 obj2 이므로
this.name은 obj2.name이 된다.
2. 일반 함수에서의 this 사용은 전역 객체에 바인딩된다.
이때 주의할 점은 내부 함수의 호출 시 this 는 부모 함수를 가리키는 게 아니라
전역 객체에 바인딩된다는 것이다.
따라서, 객체의 메소드에서 내부 함수를 사용할 경우 this 를 사용해도
객체의 프로퍼티를 가리키지 않는다.
객체의 메소드의 내부 함수에서 객체의 프러포티를 참조하게 하기 위해서
메소드에서 that 이라는 변수를 둬서 this를 저장한 후에, 내부 함수에서 that을 다가가는 방법을
사용한다.
댓글 없음:
댓글 쓰기