JavaScript - передача дополнительных параметров в обработчик событий

У меня есть объект 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>
1
задан Protos 8 June 2010 в 09:01
поделиться

1 ответ

Немного возимся:

EvtTest.prototype.attachEvents = function () {
    var that = this;
    var map = document.getElementById("map");

    map.addEventListener ('click', function () {
        that.evtHandler();
    }, false);
};

Теперь this внутри evtHandler ссылается на объект, который вы ожидали.

2
ответ дан 2 September 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: