Анонимная функция: «объект не является функцией»

0

Uncaught TypeError: объект не является функцией

Я решил сделать функцию writeMessage() анонимной; прежде чем он будет испорчен, когда другой экземпляр функции writeMessage() был создан одновременно, в результате чего текстовый вывод будет перемешаться (оба сообщения, которые "написаны", будут собраны вместе и смешаны).

Однако я столкнулся с ошибкой (как показано выше). Объект переменной является object jQuery (например: $ ('# myDivElement')).

Любые идеи относительно того, почему это так? Благодарю.

function writeMessage(message,object){
    (function(message,object,i){
        var self = this;
        setTimeout(function(){
            if(i < message.length){
                object.append(message.substr(i,1));
                i++; 
                self(message,object,i);
            }
        }, 25);
    }(message,object,0));
}
Теги:

1 ответ

4
Лучший ответ
var self = this;

Поскольку вы вызываете функцию без контекста, self ссылается на объект window. window - объект (window.toString должен давать что-то вроде [object Window]), а не функцию, поэтому самозадача self(message,object,i) не будет работать.

Вместо этого используйте это:

var self = arguments.callee;
  • 0
    Ах, спасибо! Сейчас работает отлично. Не понял, что ключевое слово this ссылается на объект window в анонимной функции.
  • 1
    @ user3029571 - Значение this имеет никакого отношения к тому, является ли функция анонимной или нет. Это полностью связано с тем, как вызывается функция, и вызывается ли она так, чтобы установить this для чего-то отличного от глобального объекта. Поскольку ваша функция не вызывает ее таким образом, this получает значение по умолчанию.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню