inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코어 자바스크립트

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

319

jjo

작성한 질문수 5

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

javascript

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

인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유

0

59

1

setTimeout 에서 this

0

81

1

2강부터 영상이 나오지 않습니다.

0

175

1

자바스크립트 주석에 이상한 점이 있어서 문의드립니다.

0

219

2

return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.

1

259

1

클래스 static 멤버

1

253

1

실행컨텍스트와 스택프레임

2

567

1

프로토타입으로 상속할때 브릿지 사용 이유

0

320

1

호이스팅 관련 질문

1

335

1

책 66p. 예제 3-2 질문입니다.

0

356

1

강의 내용 10:58 캡슐화 질문입니다.

1

398

1

강의 내용 5:10 질문입니다.

1

422

2

전역 공간에서의 this

0

426

2

18:31 addEventListener의 this

1

480

1

outerEnvironmentReference 질문

1

372

1

실행 컨텍스트와 클로저에 대해 질문드립니다.

1

448

1

Object.prototype.constructor의 [[prototype]] ?

1

658

1

함수를 값으로 할당할 때

2

457

1

15:54 'ddd' 사라지는 오류?

4

375

1

프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.

1

404

1

기본형/가변형 질문입니당

0

333

0

선생님 그러면 섹션 0만 봐도 무방한가요!?

0

335

1

Hoisting과 environmentRecord에 관한 질문입니다.

1

291

1

안녕하세요, 데이터 변경 질문입니다.

0

328

1