有没有办法在javascript中打印对象的所有方法?
时间:2020-03-06 14:54:59 来源:igfitidea点击:
有没有办法在javascript中打印对象的所有方法?
解决方案
这是有关JS反射的文章。它应该可以满足需求。
从这里:
示例1:此示例写出" navigator"对象的所有属性及其值:
for (var myprop in navigator){ document.write(myprop+": "+navigator[myprop]+"<br>") }
只需将" navigator"替换为我们感兴趣的任何对象,就可以了。
正如Anthony在评论部分中提到的那样,这不仅返回方法的所有属性,还返回所要求的问题。
糟糕!那会教我尝试用我不知道的语言回答问题。尽管如此,我认为代码是有用的,而不是必需的。
仔细看看这段代码:-
function writeLn(s) { //your code to write a line to stdout WScript.Echo(s) } function Base() {} Base.prototype.methodA = function() {} Base.prototype.attribA = "hello" var derived = new Base() derived.methodB = function() {} derived.attribB = "world"; function getMethods(obj) { var retVal = {} for (var candidate in obj) { if (typeof(obj[candidate]) == "function") retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)} } return retVal } var result = getMethods(derived) for (var name in result) { writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited") }
getMethod函数返回方法集以及该方法是否是从原型继承的方法。
请注意,如果我们打算在上下文提供的对象(例如浏览器/ DOM对象)上使用此功能,则它将无法在IE上运行。
由于JavaScript中的方法仅仅是作为函数的属性,因此for..in循环将枚举它们,但不会枚举内置方法。据我所知,没有办法枚举内置方法。而且,我们无法在对象中声明自己无法通过这种方式枚举的方法或者属性。
当然:
function getMethods(obj) { var result = []; for (var id in obj) { try { if (typeof(obj[id]) == "function") { result.push(id + ": " + obj[id].toString()); } } catch (err) { result.push(id + ": inaccessible"); } } return result; }
使用它:
alert(getMethods(document).join("\n"));