2012-11-15 5 views
1

간단한 문제가 있습니다. 나는 Foo 클래스를 가지고 있으며 타이머를 시작하는 컨스트럭터에있다. 타이머 콜백에서 경고 클래스 속성을 원하지만 "undefined"가 표시됩니다. 이유는 무엇입니까?CoffeeScripts 클래스 - 콜백의 속성에 대한 액세스

class Foo 
    simpleProperty: "fooBar" 

    constructor: -> 
    setInterval @runBar, 1 * 1000 
    return 

    runBar: -> 
    alert @simpleProperty #undefined, why? 
    return 

foo = new Foo() 

감사합니다.

답변

4

범위가 this (또는 CoffeeScript의 경우 @)이므로 범위가 잘못되었습니다.

당신은 지방 화살표를 사용해야합니다

runBar: => 
    alert @simpleProperty #fooBar 

그것이 here 작업을 참조하십시오.

+1

와우, 뚱뚱한 화살을 아주 잘 사용합니다. 이것은 CoffeeScript의 페이지에서 예제로 제시되어야합니다. –

-1

foo.runBar() 함수를 호출하면 this 포인터가 객체 foo과 바인딩됩니다.

따라서 함수에서 this.simplePropertyfoo.simpleProperty으로 간주됩니다.

분명히 undefined을 반환합니다.

+0

'this' (CoffeeScript의 AKA'@')는'foo.runBar()'할 때'foo'가 될 필요는 없습니다. 'runBar'가 바운드 함수이면 'runBar' 호출 방법에 관계없이'this'는 바운드 함수가됩니다. 어쨌든 질문은 효과적으로'f = foo.runBar; f()'이므로'runBar'가 호출 될 때'foo'가 없습니다. –

관련 문제