2014-03-02 26 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

花費一些時間來了解JavaScript範圍的工作原理可能是值得的。 – Kuma

相關問題