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