尋求創建一個事件處理程序,該事件處理程序根據事件註冊回調並進行迭代。如何在類的實例上訪問事件監聽器?
早期,工作的例子是這樣的:
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