2011-07-04 22 views
0

我试图在事件处理程序中获取原型。在事件处理程序中获取原型

function Post(){ 
    this.post; 
    this.deleteButton; 
} 
Post.prototype.delete = function(){ 

    var OBJ = this;//this is not the prototype, instead it is the HTML element (deleteButton) 
    $(OBJ.container).remove(); 
} 
Post.prototype.createPost = function(){ 

    var OBJ = this; 
    OBJ.post = document.createElement('div'); 
    OBJ.post.className = 'post' 
    OBJ.deleteButton = document.createElement('div'); 
    OBJ.deleteButton.addEventListener('click', OBJ.delete, false); 
} 

请看上面的注释部分。删除处理程序被声明为Post的原型方法。我将删除处理程序分配给删除按钮。事情是,this成为HTML元素,而不是对象的原型。

编辑:

我也希望有机会上的删除处理

+0

考虑将* createPost *函数体内构造函数,所以你不需要2次调用来创建* Post *实例。 – RobG

回答

4

像这样:

OBJ.deleteButton.addEventListener('click', function() { 
    OBJ.delete(); 
}, false); 

OBJ不是原型,它指的是实例。

更新:如果你想太删除,存储对它的引用:

this.deleteHandler_ = function() { 
    OBJ.delete(); 
}; 
OBJ.deleteButton.addEventListener('click', this.deleteHandler_, false); 

别的地方:

this.deleteButton.removeEventListener('click', this.deleteHandler_); 
+0

Kling忘了提及我也想删除事件处理程序 – einstein

+0

@ Woho87:然后存储对它的引用。 –

+1

小额外详细信息:MSIE模型需要使用oElt.attachEvent而不是oElt.addEventListener – hornetbzz

0
Post.prototype.createPost = function(){ 

    var OBJ = this; 
    OBJ.post = document.createElement('div'); 
    OBJ.post.className = 'post' 
    OBJ.deleteButton = document.createElement('div'); 
    OBJ.deleteButton.addEventListener('click', function(){OBJ.delete();}, false); 
} 

如果你使用jQuery,您可以使用代理方法:

OBJ.deleteButton.addEventListener('click',$.proxy(OBJ.delete,OBJ), false); 
+1

如果使用此解决方案删除事件处理程序,我将遇到麻烦,是吗? – einstein

1

在jQuery中您可以使用$.proxy

var onDelete = $.proxy(OBJ.delete, OBJ); 
OBJ.deleteButton.addEventListener('click', onDelete, false); 

也有ECMAScript的5 bind方法:

var onDelete = OBJ.delete.bind(OBJ); 
OBJ.deleteButton.addEventListener('click', onDelete, false); 

要删除监听器:

OBJ.deleteButton.removeEventListener('click', onDelete, false); 
+0

OP没有提到jQuery。 –

+0

@Felix Kling,它完全贬低了答案。 – katspaugh

+0

否removeEventListener示例? –

相关问题