2010-06-17 68 views
1

我有這樣的代碼我工作的每一次我調用init方法我一直收到錯誤調用從事件處理程序的方法

this.addElement時間不是一個函數

是因爲我無法從事件處理程序調用方法?

function editor() { 

    this.init = function() { 
     $("#area").bind('click' , this.click_event); 

    } 

    this.addElement = function() { 
     console.log("adding element"); 
    } 

    this.click_event = function(event) { 
     this.addElement(); 
     console.log("click event in x : "+event.data); 
    } 
} 
+0

你絕對可以從事件處理程序調用方法。問題是,在'click_event'裏面'this'是什麼?明白了,世界就是你的貝類。 – Amadan 2010-06-17 15:57:55

+0

即使我刪除「this」,我仍然得到相同的錯誤 – Ayoub 2010-06-17 15:59:55

+0

如果刪除'this',它仍然隱含地存在:'this.addElement()'與'addElement()'相同。但是檢查'這個' - 這很可能不是你想要的。 – Amadan 2010-06-17 16:01:39

回答

6
function editor() { 
    var that = this; 

    this.init = function() { 
     $("#area").bind('click' , this.click_event); 

    } 

    this.addElement = function() { 
     console.log("adding element"); 
    } 

    this.click_event = function(event) { 
     that.addElement(); 
     console.log("click event in x : "+event.data); 
    } 
} 

你應該閱讀這本書,JavaScript: the Good Parts這裏參觀Crockenator的網站,crockford.com

您還可以閱讀關於JavaScript的 「本」 的問題在這裏,http://www.quirksmode.org/js/this.html

+0

@Ayoub:基本上,'this'在JavaScript中與其他語言(如Java或C#)完全不同。它完全取決於函數如何被稱爲*,而不是它被定義的地方。更多:http://blog.niftysnippets.org/2008/04/you-must-remember-this.html – 2010-06-17 16:06:01

相關問題