&引用;这";使用JavaScript原型对象时事件方法中的关键字

&引用;这";使用JavaScript原型对象时事件方法中的关键字,javascript,events,this,Javascript,Events,This,我试图在事件处理程序中访问JavaScript中原型类的成员变量——我通常使用“this”关键字(或者在事件处理程序中使用“that”[copy of this])。不用说,我遇到了一些麻烦 以以下HTML代码段为例: <a id="myLink" href="#">My Link</a> 实例化MyClass对象并调用NormalMethod的工作方式与我预期的完全相同(警告称为“value”),但单击链接会导致未定义的值,因为“this”关键字现在引用事件目标(an

我试图在事件处理程序中访问JavaScript中原型类的成员变量——我通常使用“this”关键字(或者在事件处理程序中使用“that”[copy of this])。不用说,我遇到了一些麻烦

以以下HTML代码段为例:

<a id="myLink" href="#">My Link</a>
实例化MyClass对象并调用NormalMethod的工作方式与我预期的完全相同(警告称为“value”),但单击链接会导致未定义的值,因为“this”关键字现在引用事件目标(anchor()HTML元素)

我不熟悉原型JavaScript样式,但在过去,对于闭包,我只是在构造函数中复制了“this”:

var that = this;
然后我可以通过“that”对象访问事件方法中的成员变量。这似乎不适用于原型代码。有没有其他方法可以做到这一点

谢谢。

您的
“that=this”
结束语仍然适用:

function MyClass()
{
    ...

    var that = this;
    this.link.onclick = function() {
        return that.EventMethod.apply(that, arguments);

        // that.EventMethod() works too here, however
        // the above ensures that the function closure
        // operates exactly as EventMethod itself does.

    };
}
你应该试试

this.link.onclick = this.EventMethod.bind(this);
你需要:

this.link.onclick = this.EventMethod.bind(this);

…“bind”是Prototype的一部分,它返回一个函数,该函数调用正确设置了“this”的方法。

如上所述,使用作为Prototype库一部分的bind是解决此问题的干净方法。这个问题是另一个SO问题的重复,该问题在这里通过bind方法的实现得到了回答,而不包括整个原型库:


你指的是原型库还是直接的JavaScript原型类?三年后回复:)但对于后代:我指的是直接的JavaScript原型类。可能重复?@Bergi:我在2009年问过这个问题。你联系的问题是在2013年提出的。@Michael:是的,但那不重要。被愚弄者是根据答案的质量而不是日期来决定的;我链接的一个问题是关于松开
this
的规范问题。我不确定它是否是一个“精确”的副本,这就是为什么我没有关闭它,而只是发表了评论。该链接对访问此问题的每个人都非常有用。
onclick
如何访问事件接口?@Karl的“访问事件接口”是指“将事件对象作为参数接收”吗?
bind
方法返回一个函数(带有固定的
this
),因此
onclick=this.EventMethod
onclick=this.EventMethod.bind(this)
基本相同。在这两种情况下,都将函数存储在
onclick
属性中;他们的论点在处理方式上是相同的。如果您的问题更一般地是关于如何将参数传递给侦听器函数的,那么这个问题与这里的问题完全不同,您应该问一个新问题。这个问题使用JQuery。我更希望看到一个纯JavaScript问题/答案成为标准。
this.link.onclick = this.EventMethod.bind(this);