调用方法按事件宽度JS OOP(原型)

时间:2011-09-22 13:41:53

标签: javascript oop

我希望任何人都可以帮助我=)

我试着让这个例子保持简单:

function myClass(){
//some Code
}

myClass.prototype.func1 = function(){
//some Code
}

myClass.prototype.func2 = function(){
   document.getElementById("myEl").onclick = function(){
      this.func1 //does not work, this is only the Element...
   }
}

如何调用func1?我想在func2中绑定onclick事件。

2 个答案:

答案 0 :(得分:4)

首先,您必须保留对当前对象的引用。正如您已经注意到的,在事件处理程序中,this引用了DOM元素。您可以使用

执行此操作
var self = this;

其次,您必须调用函数:

self.func1();

完整示例:

myClass.prototype.func2 = function(){
   var self = this;
   document.getElementById("myEl").onclick = function(){
      self.func1();
   };
}

在较新的浏览器中,您还可以使用.bind() [MDN]明确定义this应引用的内容(有关其他浏览器的填充程序,请参阅MDN文档):

document.getElementById("myEl").onclick = this.func1.bind(this);

答案 1 :(得分:1)

onclick函数中,this值绑定到被单击的元素。您需要保留func2内的this的副本(参考):

myClass.prototype.func2 = function(){
    var self = this; //keep a reference to the this value
    document.getElementById("myEl").onclick = function(){
        self.func1();
    }
}