자바 스크립트에서 실험을 진행하면서 다른 메소드 (WaitAndSayHello)에서 하나의 메소드 (SayHello)를 실행하려고합니다. 콜백이 관련되어 있으므로 각 메서드에서 'this'가 해당 개체를 참조하는지 확인하기 위해 bind을 사용했습니다.bind를 사용하여 메소드가 객체를 참조하는지 확인하지만 작동하지 않는 것 같습니다
pretendThingConstructor = function (greeting) {
this.greeting = greeting;
this.SayHello = function() {
console.log(this.greeting); // Works
};
this.WaitAndSayHello = function() {
setTimeout(function() {
console.log(this)
this.SayHello() // Fails
}, 500);
}
this.WaitAndSayHello.bind(this); // This bind() doesn't seem to work
}
var pretend_thing = new pretendThingConstructor('hello world');
pretend_thing.SayHello();
pretend_thing.WaitAndSayHello();
코드는 'hello world'를 인쇄 한 다음 'Object # has no method'SayHello '로 두 번째 실패합니다. console.log에서 'this'가 이벤트를 참조하고 있음을 알 수 있습니다. 그러나 bind()를 사용해서는 안된다.
어떻게해야 bind() 작업을 할 수 있습니까?
또한이 작업을 명확하게 수행하고 싶습니다. 즉, 여러 위치에서 개체 이름을 참조하지 않아도됩니다.
@jAndy, 그 일을 완벽하게 설명합니다. 나는 항상 'var self = this'에 대해 뭔가를 발견했다. 그래서 나는 두 번째 해결책을 사용했다. 나는 그것이 나의 일상적인 JS 프로그래밍의 일부가 될 것이라고 생각한다. 다시 감사한다. – mikemaccana
@nailer : 대환영.'.bind() '는 ES5의 일부이므로 오래된 브라우저에서는 기본적으로 사용할 수 없다는 것을 기억하십시오. 그러나 매우 심플하고 거기에 많은 shim이 있습니다. – jAndy
PS. @jAndy 나는 setTimeout에서 호출 된 함수에 대해서 단 하나의 바인드 만 제거 할 수 있다고 생각합니다. 바인딩 WaitAndSayHello는 필요하지 않습니다. 다음 사람에 대한 대답을 업데이트하고 싶을 수도 있습니다. – mikemaccana