2009-12-26 6 views
0
function Something() { 
    this.var1 = 0; 
    this.var2 = 2; 
    this.mytimer; 
    this.getCars=function() { 
    //some code 
    }; 
    this.start = function(l) { 
    this.updateTimer=setInterval("this.getCars();" , 5000); 
    }; 
} 

var smth = new Something(); 
smth.start(); 

this.getCars()를 입력하면 작동하지 않습니다. 함수가 전역 선언 된 및 예를 들어 그냥 getCars 넣어 경우 작동합니다. setInterval이 매개 변수로 String이되기 때문에이 문제를 해결하는 방법을 모르겠습니다.settimer를 사용하여 현재 객체에서 함수를 호출하도록 설정하는 방법

누군가 내게 도움이 될 수 있습니까?

답변

1
var me = this 
setInterval(function() {me.getCars()}, 5000) 

당신이 prototype를 사용하는 일이 있다면, 당신은 또한 편리한 bind 방법을 사용할 수 있습니다

setInterval(this.getCars.bind(this), 5000) 
+0

JQuery를 사용하고 있습니다. 바인드 방법을 사용하는 방법에 대해 구체적으로 설명 할 수 있습니까? – Max

+0

바인드는 선택 사항입니다. 기본적으로 다른 방법으로 ... – jspcal

+0

jQuery에 'bind'가 있다고 생각하지 않습니다. –

0

이 시도 :

function Something() { 
    this.var1 = 0; 
    this.var2 = 2; 
    this.mytimer; 
    var me = this; 
    this.getCars = function() { 
    console.log(me.var2); 
    }; 
    this.start = function(l) { 
    me.updateTimer = setInterval(me.getCars, 1000); 
    } 
} 

var smth = new Something(); 
smth.start(); 

console.log() 비트 파이어 폭스/방화범입니다. 당신이 그것을 사용하지 않는다면 뭔가 다른 것으로 대체하십시오 (비록 내가 그것을 개발하는 것이 좋습니다).

기본적으로 문제는 함수를 호출 할 때 객체의 메서드도 호출하는 방식으로 this의 값을 결정한다는 것입니다. 자세한 내용은 Method binding을 참조하십시오. 그래서 위의 예제 (메소드)에서했던 것처럼 this의 값을 수정해야합니다.

+1

사실, setInterval이 호출 될 때 this.getCars가 함수 참조로 해석되므로 setInterval (this.getCars, 1000)도 정상적으로 작동합니다. 문제는 getCars 메소드에서 'this'를 사용하는 것입니다. 바로 '나'var를 사용하는 것이 정말 유용합니다. – slebetman

관련 문제