2013-04-18 50 views
0

我有一個JavaScript對象,我希望能夠處理一些交互功能。以簡單的方式描述場景有點棘手,所以希望它不會在這裏一發不可收拾。混淆,這個指針和JavaScript中的事件

我物體看起來像

myobject = function() { 
    this.initialize = function() { 
     // HERE this = the myobject instance 
     var test = document.createElement('div'); 
     test.onmousedown = this.mousedown; 
    } 
    this.mousedown = function(e) { 
     // HERE this = the calling div-element 
    } 
} 

所以我的問題基本上是this不會成爲一個myobject實例時this.mousedown(e)被調用時,它會寧是調用(如果術語是正確的嗎?)在這情況下,它是我創建的div,並將其放在上面的變量test中。

我想訪問正在運行該方法的實例(因爲我相信這是我創建的mousedown方法)。

這遠遠我有一些想法,我已經嘗試了:

  • 上創建一個div屬性data-包含this對象,並在該操作。
  • 發送this指針作爲參數與e一起this.mousedown(e)

這是所有我能想到的,現在希望它讓SENCE。

+4

你意識到你的示例代碼是無效的JS? 'funciton(){...}'是調用一個名爲「funciton」的函數的方法,後跟一個不相關的語句塊。 'this.initialize(){...}'同樣是一個方法調用,後跟一個不相關的塊。正如'this.mousedown(){...}'。分號插入後,這段代碼相當於'myobject = funciton(); this.initialize(); var test = ...; test.onmousedown = this.mousedown; this.mousedown();' –

回答

4

您可以創建一個副本,當你第一次實例化對象:

var myobject = function() { 
    var self = this;  
    this.initialize() { 
     // HERE this = the myobject instance 
     var test = document.createElement('div'); 
     test.onmousedown = this.mousedown; 
    } 
    this.mousedown(e) { 
     // HERE this = the calling div-element 
     // use self instead of this 
    } 
} 
+0

爲什麼downvote?這是一個有效的解決方案 – Kenneth

+0

懶惰的懦夫?...哦。 –

+0

@Kenneth,據我所知,它確實解決了我的問題,我想最重要的是,當我嘗試在回調函數中使用'this'時,我感到有點困惑,當我向裏面看,看看爲什麼它不是在工作中,我意識到在這個背景下的「這個」並不是所有的js對象。但你提示的解決方案對我來說很好,謝謝! – qrikko

0

最簡單的辦法就是讓你指的回調一個「自我」 VAR:

myobject = funciton() { 
    var self = this; 
    this.initialize() { 
     //use self to refer to myobject 
     self.mousedown(e); 
    } 
    this.mousedown(e) { 

    } 
} 
+0

我承認我不知道你想要做什麼.mousedown - 但正如@Kenneth也指出的那樣,你如何避免這種混亂。 –

+0

'funciton()'應該是'function()'我相信 – lifetimes

+0

肯定...我複製了代碼並給出了一個如何使用'self'的例子 –