강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

jjo님의 프로필 이미지
jjo

작성한 질문수

코어 자바스크립트

bind함수대신 var self = this로 바꾸어서 만들어보려하는데요.

작성

·

312

0

var callback = function() {

console.dir(this);

};

var obj = {

a: 1

};

setTimeout(callback.bind(obj), 100);

위 예시를 bind를 쓰지 않고 만들어 보려고 하는데요.

제가 만든 방법은 아래와 같은데, 혹시 더 간단하게 만드는 다른 방법이 있을까요?

var obj = {

    a: 20,

    b: function() {

        var self = this;

        var c = function() {

            console.log(self);

        }

        setTimeout(c, 100);

    }

}

obj.b();

답변 1

0

정재남님의 프로필 이미지
정재남
지식공유자

위 코드(1)과 새로 작성하신 코드 (2)는 완전히 다릅니다.

(1)은 객체의 바깥에서 setTimeout을 실행한 반면, (2)는 객체의 b메서드 내부에서 실행하고 있습니다.
(1)을 bind를 쓰지 않는 방식으로 변형하시려고 했다면, (1)의 나머지 조건은 최대한 유지시켜야 하겠죠.

어떤 의도로 bind를 쓰지 않으려고 하신건지 모르겠습니다만,
(1)의 callback 함수와  'obj'를 건드리지 않으면서 bind를 쓰지 않은 채로
setTimeout의 콜백함수 내에서 obj의 this를 callback함수에 전달할 수 있는 유일한 방법은
call 또는 apply를 사용하는 것입니다.

setTimeout(function() {
  callback.call(obj);
}, 100);
setTimeout(function() {
  callback.apply(obj);
}, 100);
jjo님의 프로필 이미지
jjo

작성한 질문수

질문하기