У меня есть объект JavaScript, который имеет некоторые определенные переменные и присоединяет некоторые обработчики событий. Я хотел бы, чтобы обработчики событий имели доступ к определенным переменным. Существует ли способ сделать это? Обработчики событий в их собственном локальном объеме, так не имейте доступа к переменным объекта. Существует ли способ передать их в, не используя глобальные переменные?
У меня есть идея, что закрытия были бы решать это, но я не уверен как.
код ниже распечатает имя объекта, когда страница загрузится, но когда Вы нажмете на объект DOM карты, это скажет, что имя не определено.
Вся справка очень ценится.
Colm
<!DOCTYPE html>
<html lang="en">
<head>
<title>Map Test</title>
<meta charset="utf-8" />
<script type="text/javascript">
window.onload = function() {
var e = new EvtTest();
e.printName();
e.attachEvents();
};
function EvtTest() {
this.name = "EvtTest";
}
EvtTest.prototype.name = null;
EvtTest.prototype.attachEvents = function () {
var map = document.getElementById("map");
map.addEventListener ('click', this.evtHandler, false);
};
EvtTest.prototype.printName = function () {
console.log ("This Name : " + this.name);
};
EvtTest.prototype.evtHandler = function (e) {
e.preventDefault();
console.log ("Name : " + this.name);
};
</script>
<style type="text/css">
html, body {
height:100%;
width:100%;
margin: 0;
background-color:red;
}
#map {
height: 300px;
width: 300px;
background-color:yellow;
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>
Немного возимся:
EvtTest.prototype.attachEvents = function () {
var that = this;
var map = document.getElementById("map");
map.addEventListener ('click', function () {
that.evtHandler();
}, false);
};
Теперь this
внутри evtHandler
ссылается на объект, который вы ожидали.