你的問題是相當一般。爲了您的兩個特定點:
爲了使您的函數遞歸,我相信您可以簡單地將您的'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。
在大多數瀏覽器中,可以使用'toString'方法...'func.toString()'來獲取函數的源代碼。 – 2011-06-11 18:00:36