Javascript «это» проблема - PullRequest
       8

Javascript «это» проблема

2 голосов
/ 27 января 2009

Почему «я» и «это» не определены, когда setTimeout вызывает анонимный обратный вызов?

    var gMyObj = new MyObj();
    gMyObj.myFunc();

    function MyObj() {
        this.myFunc = function () {
            var me = this;
            alert(me.constructor);  // defined
            setTimeout(function(me) {  
                      alert(me.constructor); // undefined
                  }, 100);
        };
    }

Разрешение: выбранный ответ правильный, спасибо. Мой вопрос заключался в упрощении реальной проблемы, с которой я столкнулся. Оказалось, что jQuery изменяет «this» внутри метода click (), чтобы он указывал на соответствующий элемент DOM. Я создал новую переменную «me» для хранения «this» и пытался передать ее методу click. Все, что мне нужно было сделать, это просто использовать «я» внутри события click и позволить закрытию сохранять ссылку на него. Передача 'me' в click () не удалась по той же причине, что и в этом примере, а именно click () не ожидала этого.

1 Ответ

10 голосов
/ 27 января 2009

Из-за этого:

function(me) { 

Сделать это:

function() {

И ты в порядке.

Что касается «почему?» часть, вы определяете анонимную функцию, которая принимает аргумент с именем me. Когда setTimeout() вызывает эту функцию, она не передает аргументов, что означает, что me будет неопределенным. Удаление me из списка аргументов позволяет ранее определенному me быть видимым внутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...