有没有办法在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"));

