寻求创建一个事件处理程序,该事件处理程序根据事件注册回调并进行迭代。如何在类的实例上访问事件监听器?
早期,工作的例子是这样的:
var elt = document.getElementById("square"),
clickCount = 0;
// call a priviledged method with access to prviate vars from
// outer scope
var count = function() {
clickCount += 1;
alert("you clicked me " + clickCount + " times!");
};
elt.addEventListener("click", count, false);
现在我想其实写的东西JS我可以使用。这是目前建筑:
//Create a class object
function CountMe() {
//privately scoped variables
var clickCount = 0;
//methods on 'class' CountMe
this.countClick = function() {
//who's context am I in?
this.addCount();
alert("you clicked me " + clickCount + " times!");
};
this.addCount = function() {
clickCount += 1
};
};
// Create an instance of countMe class
var clickMe = new CountMe();
//Add an event listener for clicks
document.getElementById("square").addEventListener("click", clickMe.countClick ,false)
我收到的错误是Uncaught TypeError: Object #<CountMe> has no method 'addEventListener'
给定一个HTML页面是这样的:
<html>
<body>
<div style="width:50px; height:50px; background-color:red;" id="square">
</div>
</body>
</html>
我的问题是:
- 如何来构造
onclick
事件的功能与第一种方法一样吗? - 在方法
countClick
什么上下文嵌套在这里?我怀疑的CountMe
类的实例,只是想要别人的。
我给的链接看看。我更新了我的代码示例,现在我得到以下错误:未捕获的TypeError:Object#没有方法'addCount'。你能根据你的评论找出正确的答案吗? –
rhodee
是的,现在问题/功能是上下文是DivElement而不是CountMe实例。 – Bergi
我已经概述了可能的解决方案,但是在阅读有关问题时可能会自己找到并理解它们。 – Bergi