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));
}
var self = this;
Поскольку вы вызываете функцию без контекста, self
ссылается на объект window
. window
- объект (window.toString
должен давать что-то вроде [object Window]
), а не функцию, поэтому самозадача self(message,object,i)
не будет работать.
Вместо этого используйте это:
var self = arguments.callee;
this
ссылается на объектwindow
в анонимной функции.this
имеет никакого отношения к тому, является ли функция анонимной или нет. Это полностью связано с тем, как вызывается функция, и вызывается ли она так, чтобы установитьthis
для чего-то отличного от глобального объекта. Поскольку ваша функция не вызывает ее таким образом,this
получает значение по умолчанию.