자바스크립트 this, bind
자바스크립트 this, bind
this
상황에 따라 어떠한 객체를 가리키는 키워드이고, this는 함수를 호출한 객체입니다.
보통 함수를 호출 할 때에 aTest()라고 호출을 하지만 전역객체를 쓰지 않아도 가능해서 이렇게 쓸 수 있습니다. 전역객체에서 접근하려면 window.aTest()라고 호출합니다.
하지만 코드 상단에 'use strict'를 입력하면 window.aTest()라고 입력해주어야합니다.
함수를 정의하게 되면 이 함수는 자동으로 window 객체에 등록이 됩니다.
function으로 함수를 정의하면 window객체에 등록이 되지만 화살표함수는 window객체에 등록이 되지 않습니다.
그래서 함수를 호출한 객체라고 부릅니다.
aTest 함수안에서 this를 찍어보면 함수를 호출한 객체를 가르키고 있습니다.
객체(Object)에서의 this
this는 함수를 호출한 객체를 가르키기 때문에 object안에 있는 내용들을 출력합니다.
만약 main 함수를 다른 변수에 넣고 호출한다면
main2는 window를 가리키게 됩니다. main2는 어떠한 객체에도 속하지 않기 때문에 전역객체인 window를 가리킵니다.
함수는 꼭 객체 안에서 만들 필요는 없습니다.
함수를 먼저 생성하고 object에 구성원으로 추가를 해주어도 this는 object를 가리킵니다.
또는
object 객체에 접근해서 main 속성을 추가해 main 함수를 넣어서 추가 할 수도 있습니다.
이벤트처리에서의 this
html 파일에서 button을 만들고 id를 button으로 주고 이벤트 안에서 this를 알아보겠습니다.
이벤트안에서의 this는 이벤트를 발생시킨 돔요소를 가리킵니다.
bind
bind는 함수처럼 호출 가능한 새로운 함수로 특수객체를 반환합니다.
첫번째 인자는 this키워드를 가리키는 객체이고 두번째 인자부터는 바인드된 함수의 인수로 제공 됩니다.
이 객체를 호출 하면 this를 원하는 형태로 묶어서 고정된 함수로 반환합니다.
함수를 누가 호출 하든, 어떻게 호출하든 상관없이 this값이 바뀌지 않도록 내가 원하는 객체로 고정하고 싶을 때 사용합니다.
bind 메서드를 쓰지 않으면 어떠한 객체에도 속하지 않은 함수의 this는 전역객체인 window를 가리키지만 bind 메서드를 쓰면 내가 원하는 객체를 가리킬 수 있습니다.
bind 메서드를 쓰면 bind된 함수를 object에 추가를 해도 내가 지정한 객체만을 가리킵니다.
이것 말고도 인수를 고정해서 사용할 수도 있습니다.
bind의 첫번째 인자는 항상 실행컨텍스트를 넘겨줘야 하지만 여기서는 넘겨줄 객체가 없으므로 null을 주고 a의 값을 고정시켰습니다.
주의할 점은 이미 bind된 함수는 또 bind를 할 수 없습니다. bind된 함수를 또 bind를 한다해도 처음에 내가 지정한 객체만을 가리킵니다.
댓글
댓글 쓰기