2011-06-11 93 views
0

我正試圖編寫一個對象資源管理器,顯示用戶屬性和對象的值。我的想法是,將能夠深入查看對象內的對象,單擊超鏈接來檢查方法的源代碼,否則查看屬性值。以html格式顯示對象

這是我到目前爲止(jsFiddle)。

問:幫助!我不知道我在做什麼!我注意到的一件事是,我顯然沒有得到hasOwnProperty爲true的任何屬性。另一件事是我需要的功能是遞歸的。另一個是:我想我記得閱讀可以獲得JavaScript函數文本的JavaScript函數的某處。

所以,回答你的問題:「這是什麼問題?」我想我可以說「你能幫我寫這個通用JavaScript對象瀏覽器作爲可能的jQuery插件嗎?」

+0

在大多數瀏覽器中,可以使用'toString'方法...'func.toString()'來獲取函數的源代碼。 – 2011-06-11 18:00:36

回答

1

你的問題相當一般。爲了您的兩個特定點:

爲了使您的函數遞歸,我相信您可以簡單地將您的'bodyLog'函數的代碼塊複製到您已評論遞歸的地方。當你將它傳遞給你的遞歸調用時,你會想添加一個'level'。

// $(obj).each(function(index,Element) { // EDIT shouldn't need this iteration, you're inside the loop 
    result += showObjectsMethodsAndValues(Element,level+1,true); 
    result += showObjectsMethodsAndValues(Element,level+1,false); 
//}); 

獲取函數的字符串正文的方法只是在方法對象上調用'.toString()'。所以如果你這樣做:

var myFun = function(a, b) { 
    return a+b; 
}; 

alert(myFun.toString()); 

你會看到功能的主體打印出來。對於內置對象,您可能會將「[native code]」視爲該函數的主體,而不是真正的JavaScript代碼。

你沒有看到任何hasOwnProperty屬性的原因是我懷疑jQuery對象有任何。它的所有屬性都可能存在於它的原型對象中。試試這個:

var myObj = {foo: 1, bar: 2}; 
myObj.prototype = {baz: 3}; 

然後在myObj上調用你的函數。 foo和bar應該返回hasOwnProperty true,baz將返回false。我相信所有jQuery的屬性都存在於它的原型對象中,所以它們都會返回false。