Javascript 如何在事件处理程序中使用“获取类变量”;这";

Javascript 如何在事件处理程序中使用“获取类变量”;这";,javascript,Javascript,下面是一些代码: var class = function(elem,div){ this.elem= elem; this.div = div; this.init = function(){ this.div.bind('keyup',this.handler); } this.handler= function(event){ //HOW DO I GET "this.elem" ??? //he

下面是一些代码:

var class = function(elem,div){

    this.elem= elem;
    this.div = div;

    this.init = function(){
        this.div.bind('keyup',this.handler);
    }

    this.handler= function(event){
        //HOW DO I GET "this.elem" ???
        //here, this = div
    }

    this.init();
}

我想从“handler”函数中获取变量“elem”,但每次调用this.elem,“this”都是指绑定到事件处理程序的元素

好吧,你可以参考
elem


或者你可以声明
var=this
在处理程序外部,然后引用.elem

我怀疑您正在将
此.handler
注册为事件处理程序本身。在这种情况下,方法没有在对象的上下文中执行;它像其他事件处理程序一样执行

尝试编写一个简单的处理程序,在类的实例上调用
处理程序
方法

var instance = new class(...); // populate args that make sense 
document.yourElement.onclick = function(){
   instance.handler();
}
此外,您确实应该使用prototype来定义实例方法。你现在这样做效率很低

var class = function(elem,div){

    this.elem= elem;
    this.div = div;

    this.init();
}


class.prototype.init = function(){
        this.div.bind('keyup',this.handler);
    }

class.prototype.handler= function(event){
        //HOW DO I GET "this.elem" ???
        //here, this = div
    }

如果您对使用
ES5
很在行,那么您可能需要调用
函数.prototype.bind
方法。像

this.handler= function(event){
    //HOW DO I GET "this.elem" ???
    //here, this = div
}.bind(this)

该方法也有很多垫片可用于优雅地支持老式浏览器。上述代码将导致当调用方法时,存储在
this.handler
中的函数绑定到
this
的值,如
newclass()
永远。

elem
被捕获在一个闭包中,只需将其引用为
elem

this.handler= function (event) {
     //HOW DO I GET "this.elem" ???
     //here,

     elem; // elem from the constructor.

     this = div
} 

  • javascript中没有类

  • 类是保留字,不应将其用作标识符名称

  • 我猜从你的名字和你使用它们的方式来看,elem是一个DOM元素,div是一个div元素。如果是这样,他们就没有bind方法。如果要分配侦听器,请执行以下操作:

    this.onkeyup = this.handler;
    

  • 但是在定义
    this.handler

    之后,必须将其放在JavaScript中发现的最大问题之后。(我自己仍在试图深入理解“this”。它与绑定闭包上下文有关。或者其他什么。)OP希望获得对标识符元素的引用,而不是实例。它被保存在一个闭包中,只需
    elem
    即可访问。