2010-01-13 52 views
2

我的Javascript知識經驗較少,所以我可能會在下面使用錯誤的描述。Javascript替換一個包含動態內容的新函數

我有在靜態js文件的對象:

var Info = { 
    methodA: function() { 
     // Call methodB. 
     this.methodB('test'); 
    }, 

    methodB: function(value) { 
     // Do stuff 
    } 
} 

現在,在.aspx文件中,我創建一個函數methodC(值)與不同內容(取決於某些數據),我要插入代替的methodB(值)的上述定義:

... 
var methodC = function(value) { 
    // Do different stuff 
} 
... 

我的想法至今,一直在下面的方式與methodC取代的methodB:

... 
Info.methodB = methodC; 
... 

使用IE的buildin開發工具,調用this.methodB('test')時出現以下錯誤;從Info.methodA():

Object doesn’t support this property or method

去掉 '這個' 從this.methodB( '測試'),導致錯誤:

Object expected

我使用Firebug沒有得到任何錯誤 - 可能是因爲我使用了各種框架,可能會發現錯誤。

我應該怎麼做,還是應該使用完全不同的方法?

問候,卡斯帕

+0

它爲什麼不起作用?你會得到什麼錯誤信息?否則你看到的行爲是什麼? – 2010-01-13 11:14:20

+0

我已添加關於我收到的錯誤的詳細信息。 – Chau 2010-01-13 12:44:13

回答

4

它應該工作,你是這樣做的正確方法。問題在別處。

更新: 您撥打一個了methodA對象上這應該仍工作多長時間,如Info.methodA()。

也許你不理解錯誤信息?

「對象不支持此屬性或方法」表示在「this.methodB()」表達式中,沒有名爲「methodB」的屬性。所以這意味着這個不是信息當代碼方法A被執行。

「預期對象」表示變量方法B在當前執行上下文中未知。當然這是因爲方法B永遠不是變量,只有的屬性信息

要調試你的問題,你需要知道什麼是這個當代碼執行時,以及爲什麼它不是你認爲它應該是。當您撥打Info.methodA(),設置爲信息方法A開始執行。

+0

改變這一點。methodB('test')直接調用methodC('test')的作品 - 因此我的methodC(值)的實現應該工作。我知道如何調試變量,但如何調試函數/方法,我還沒有想出:) – Chau 2010-01-13 12:48:09

+0

如何在IE的開發人員工具中看到'this'? – Chau 2010-01-14 07:21:58

+0

@Alsciende:在Firebug中,我可以看到'this'變量。但在IE的開發者工具中,我需要使用控制檯並寫下如下內容:var a = this;然後,「this」在其他局部變量中可見。 – Chau 2010-01-22 08:03:18