混淆、此指针和javascript中的事件

混淆、此指针和javascript中的事件,javascript,Javascript,我有一个javascript对象,我希望能够处理一些交互功能。用一种简单的方式来描述这个场景有点棘手,所以希望它不会完全失控 我的物体看起来像 myobject = function() { this.initialize = function() { // HERE this = the myobject instance var test = document.createElement('div'); test.onmousedown

我有一个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.mousedown(e)
时,
this
将不是一个
myobject
实例,而是调用方(如果术语正确的话?),在这种情况下,它是我创建的div,并放入上面名为
test
的变量中

我希望能够访问正在运行该方法的实例(因为我相信这就是我创建的
mousedown
方法)

到目前为止,我已经尝试了一些想法:

  • 在包含
    this
    对象的
    div
    上创建一个
    data-
    属性并对其进行操作
  • 将this指针作为参数与
    e
    一起发送到
    this.mousedown(e)

这就是我现在所能想到的一切,希望它有意义。

最简单的解决方案是创建一个您在回调中引用的“自我”变量:

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

    }
}

最简单的解决方案是创建一个在回调中引用的“self”var:

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

    }
}

您可以在第一次实例化对象时创建副本:

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
    }
}

您可以在第一次实例化对象时创建副本:

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
    }
}

您知道您的示例代码无效吗
funciton(){…}
是对名为“funciton”的函数的方法调用,后跟一个不相关的语句块
this.initialize(){…}
类似地是一个方法调用,后跟一个不相关的块。照原样,
this.mousedown(){…}
。插入分号后,此代码相当于
myobject=function();这是初始化();var检验=。。。;test.onmousedown=this.mousedown;这个。mousedown()您是否知道示例代码无效
funciton(){…}
是对名为“funciton”的函数的方法调用,后跟一个不相关的语句块
this.initialize(){…}
类似地是一个方法调用,后跟一个不相关的块。照原样,
this.mousedown(){…}
。插入分号后,此代码相当于
myobject=function();这是初始化();var检验=。。。;test.onmousedown=this.mousedown;这个。mousedown()
我承认我不知道你想用它做什么。mousedown-但正如@Kenneth也指出的,这就是如何避免“这个”混淆的方法。
function()
应该是
function()
我确信。。。我复制了代码,并给出了一个如何使用“self”的示例。我承认我不知道你想用它做什么。mousedown-但正如@Kenneth也指出的,这就是如何避免“this”混淆的方法。
function()
应该是
function()
我确信。。。我复制了代码,并给出了一个如何使用“self”@Kenneth的示例,据我所知,它确实解决了我的问题,我想最重要的是,当我试图在回调函数中使用
this
时,我有点困惑,当我查看内部以了解为什么它不起作用时,我意识到上下文中的
this
根本不是js对象。但是你提示的解决方案对我来说很好,谢谢!完美的很乐意帮忙。我猜想脚本中的错误来自于将代码复制到SO。如果没有,请修改Mike的评论。事实上,问题是因为我只是从头开始写示例,不小心键入了一个工作示例。我想我已经编辑过了,现在应该是正确的,只要我没有遗漏解释错误的评论。@Kenneth,就我看来,这确实解决了我的问题,我想最重要的是,当我试图在回调函数中使用
this
时,我有点困惑,当我查看内部以了解为什么它不起作用时,我意识到上下文中的
this
根本不是js对象。但是你提示的解决方案对我来说很好,谢谢!完美的很乐意帮忙。我猜想脚本中的错误来自于将代码复制到SO。如果没有,请修改Mike的评论。事实上,问题是因为我只是从头开始写示例,不小心键入了一个工作示例。我想我已经编辑过了,现在应该是正确的,只要我没有遗漏对错误的评论。