&引用;这";使用JavaScript原型对象时事件方法中的关键字
我试图在事件处理程序中访问JavaScript中原型类的成员变量——我通常使用“this”关键字(或者在事件处理程序中使用“that”[copy of this])。不用说,我遇到了一些麻烦 以以下HTML代码段为例:&引用;这";使用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
<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);