2010-11-08 84 views
5

我有什麼似乎是一個非常棘手的情況。我想將對象的實例傳遞給由同一個對象實例創建的DOM元素的事件偵聽器(如果有意義的話)。如何將JavaScript類實例傳遞給DOM Event Listener?

function Object(callback){ 
    this.callback = callback; 
    this.node = document.createElement('div'); 
    this.send = function(){ 
     document.getElementById('list').appendChild(this.node); 
    } 
    this.node.addEventListener('click',function(){/*this.callback() of Object instance needs to go here*/},true); 
} 

我知道,使用callback()將事件偵聽器內工作,但是那不是我所需要的,因爲我將使用從沒有從結構通過稍後的實例變量。

我該如何解決這個問題?

回答

3

匿名函數改變了這個的含義。爲了能夠處理程序中使用它,使用其他VAR或不創建另一個功能:

var elem = this; 
this.node.addEventListener('click',function(){ elem.callback(); },true); 

this.node.addEventListener('click', this.callback, true); 
+0

一個問題,確實ELEM得到的定義只或再次評估時,事件發生?如果不是事件發生時有什麼辦法做到這一點? – livemac 2010-11-08 04:20:02

+0

只有在評估外部函數時纔會評估它。 elem被存儲以在回調被觸發時使用,但它總是指向相同的實例;如果在此期間更改實例,elem將反映更改(只有一個實例,它不會被複制,elem只是成爲另一個參考)。我看不到爲什麼當事件發生時你需要分配再次運行的原因。 – 2010-11-08 04:31:51

+0

這就是我所需要的!非常感謝你 – livemac 2010-11-08 05:06:34