• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

20.07.25 17:39 작성 조회수 208

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);