混淆、此指针和javascript中的事件
我有一个javascript对象,我希望能够处理一些交互功能。用一种简单的方式来描述这个场景有点棘手,所以希望它不会完全失控 我的物体看起来像混淆、此指针和javascript中的事件,javascript,Javascript,我有一个javascript对象,我希望能够处理一些交互功能。用一种简单的方式来描述这个场景有点棘手,所以希望它不会完全失控 我的物体看起来像 myobject = function() { this.initialize = function() { // HERE this = the myobject instance var test = document.createElement('div'); test.onmousedown
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的评论。事实上,问题是因为我只是从头开始写示例,不小心键入了一个工作示例。我想我已经编辑过了,现在应该是正确的,只要我没有遗漏对错误的评论。