2013-12-15 101 views
0

遺漏的類型錯誤:對象不是一個函數匿名函數:「對象不是一個函數」

我決定把我的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)); 
} 

回答

4
var self = this; 

由於您呼叫沒有上下文的功能,selfwindow對象。 window是一個對象(window.toString應該給出類似[object Window]的東西)而不是函數,因此計算self(message,object,i)將不起作用。

相反,使用這樣的:

var self = arguments.callee; 
+0

啊,謝謝!它現在工作完美。沒有意識到'this'關鍵字在匿名函數中引用'window'對象。 – user3029571

+1

@ user3029571 - 「this」的值與該函數是否匿名無關。它完全與該函數的調用方式有關,以及是否將'this'設置爲全局對象以外的其他方法。由於你的函數沒有以這種方式調用它,'this'得到它的默認值。 – jfriend00

+0

@ jfriend00 Woops。謝謝你的糾正。 :) – user3029571