2013-04-18 16 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'的例子 –