以下是一些代码:
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();
}
我想从我的“处理程序”函数中获取变量“elem”,但每次调用this.elem时,“this”指的是绑定到事件处理程序的元素!!。
答案 0 :(得分:1)
好吧,你可以参考elem
。
或者您可以在处理程序之外声明var that = this;
,然后引用that.elem
。
答案 1 :(得分:1)
我怀疑您正在注册this.handler
作为事件处理程序本身。在这种情况下,该方法不在对象的上下文中执行;它像任何其他事件处理程序一样被执行。
尝试编写一个简单的处理程序,在类的实例上调用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
}
答案 2 :(得分:1)
如果您使用ES5
时感觉很酷,则可能需要调用Function.prototype.bind
方法。像
this.handler= function(event){
//HOW DO I GET "this.elem" ???
//here, this = div
}.bind(this)
这种方法还有很多垫片可以优雅地支持旧的浏览器。上面的代码会导致this.handler
中存储的函数在永久调用this
方法时绑定到new class();
的值。
答案 3 :(得分:0)
elem
在闭包中捕获,只需将其引用为elem
:
this.handler= function (event) {
//HOW DO I GET "this.elem" ???
//here,
elem; // elem from the constructor.
this = div
}
另外
javascript中没有类。
class 是保留字,不应将其用作标识符名称。
我想从你的名字和你使用它们的方式来看, elem 是一个DOM元素而 div 是一个DIV元素。如果是这样,他们没有 bind 方法。如果要分配监听器,则:
this.onkeyup = this.handler;
但必须在定义this.handler
之后放置。