javascript - 如何在事件处理程序中访问 `this`?

标签 javascript oop events this

我有一个创建 DOM 元素并必须捕获所有点击事件的类。

简化代码:

function myClass()
{
  this.domElement = document.createElement("canvas");
  this.domElement.addEventListener("click", this.handleClick);
}
myClass.prototype.handleClick = function(evt)
{
  alert("Clicked!");
  // How to modify `this` object?
}

现在我想在handleClick()中修改myClass实例的一些属性和变量。但是 this 当然是指 canvas 对象。

问题如何在事件处理程序中访问对象的this

最佳答案

这可以通过关闭对您的实例的引用并使用 apply 强制作用域来实现:

在第 1 步中,您的示例显示了 this 是如何被单击的元素:http://jsfiddle.net/JAAulde/GJXpQ/

在第 2 步中,我有一个示例,它在构造函数中存储对您的实例的引用,然后将匿名函数设置为点击处理程序,并从存储的引用中调用您的点击方法。 http://jsfiddle.net/JAAulde/GJXpQ/1/这会导致点击处理程序中的 this 成为您的实例,如果您不需要访问被点击的元素,它将为您工作。

在第 3 步中,我存储了相同的引用,并使用了一个匿名函数,但在该函数中,我获取了单击时进入 anon 函数的参数,我将对实例的引用添加到这些参数中,然后我调用单击元素范围内的单击处理程序并传递新的参数集。 http://jsfiddle.net/JAAulde/GJXpQ/2/使用这种方法,在点击处理程序中,我可以通过 this 访问被点击的元素,并通过 instance 访问 myClass 的实例。

希望对您有所帮助。这可能会让人非常困惑,因此请在需要时提出问题。

关于javascript - 如何在事件处理程序中访问 `this`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696672/

相关文章:

c++ - protected 方法在c++中继承时可以成为私有(private)方法吗?

php - 用于从表单中获取值的动态表单类

c# - 如何避免复制/粘贴许多事件处理程序

javascript - Backand - 如何从安全操作内部 console.log() 内容?

oop - TILED 编辑器 - 对象放置可以对齐到对象层中的网格吗?

iphone - 我可以让 UIControl 取得 "disposable"事件目标的所有权吗?

c# - 如何触发事件?

javascript - 从字符串 js/jquery 中删除 html 标签

javascript - 使用 ng-pattern 的多封电子邮件的正则表达式

javascript - 框架中用于更轻松地定义 SVG 路径字符串的实用程序?