this... 객체지향 프로그래밍을 배우다 보면 객체 자기 자신을 지칭하는 키워드 이다. 즉 한번 결정 되면 객체 자기 자신만 지칭을 하고 변하지 않는데...
과연 자바스크립트에서도 그럴까?
function Person(name) {
this.name = name
}
Person.prototype.introduce = function() {
console.log( `My name is ${this.name}` )
}
위와 같이 적당히 객체지향 언어처럼 Person클래스를 만들고 메소드로 introduce를 추가해줬다. this.name이 어떻게 행동되는지 보시면 되겠다.
여기까지는 예상하는봐와 같이 각각을 잘 소개 하는 것을 볼수 있다.
자 상황을 바꾸어 보자 객체가 생성되고 최소 2초가 지난 후에 자기소개를 하는 코드를 만들어 보자.
코드를 보면 위와 다른 점이라고는 setTimeout을 통해서 호출 하는 것만 바뀌었지만... 둘다 이름을 잃어 버린걸로 보인다.
setTimeout에 introduce 바로 넣어 주는가와 함수를 한번 감싸서 넣어 주는 것과의 차이이다.
왜 그럴까?
첫번째 예제는 setTimeout에 sejiWork.introduce 함수 그 자체를 인자로 넘겨 주었다. 코드로 보면...
setTimeout(function() {
console.log( `My name is ${this.name}` )
}, 2000)
위와 같은 코드로 볼 수 있다. 하지만 그 아래의 코드는 sejiWork객체가 introduce함수를 실행 시키는 코드이다.
즉 this는 호출자에 의해 결정 된다고 볼 수 있다.
댓글
댓글 쓰기