匿名函数:“对象不是函数”

时间:2013-12-15 02:03:20

标签: javascript jquery

未捕获的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 个答案:

答案 0 :(得分:4)

var self = this;

由于您在没有上下文的情况下调用该函数,self引用了window对象。 window是一个对象(window.toString应该提供类似[object Window]的内容而不是函数),因此self(message,object,i)无法正常运行。

相反,请使用:

var self = arguments.callee;