2014-03-02 1 views
0

내가 아주 이상한 행동에 달렸다에서 함수를 전달하면 리스너가 작동하지 않습니다 "속성을 읽을 수 없습니다 'FN'정의의 형식 오류"나는 "이"

Ext.create('Ext.window.Window', { 
    listeners: { 
     close: this.processClose 
    }, 
    processClose: function() { 
     alert('processed'); 
    } 
}).show(); 

이 코드는 발생

하지만 올바르게 작동합니다.

Ext.create('Ext.window.Window', { 
    listeners: { 
     close: function() { 
      this.processClose(); 
     } 
    }, 
    processClose: function() { 
     alert('processed'); 
    } 
}).show(); 

어떻게 가능합니까? 이 두 가지 코드는 완전히 같습니다.

답변

3

이들은 동일하지 않습니다. 차이점은 this이 평가되는 시간입니다. 첫 번째 경우에서 this은 포인터를 선언하는 동안 this 포인터가 무엇이든 가리킬 것입니다. 왜냐하면 전체 오른쪽면을 평가해야 윈도우 객체를 생성 할 수 있기 때문입니다. 두 번째 경우에는 콜백이 실행될 때까지 지연됩니다. close 이벤트의 경우 this 포인터의 기본값은 창 개체입니다.

+0

자바 스크립트 범위 지정이 작동하는 방식을 이해하는 데 시간을 할애 할 가치가 있습니다. – Kuma

관련 문제