我有一个创建 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/