是否有办法打印一个对象的所有方法?

有没有办法用 JavaScript 打印对象的所有方法?

80705 次浏览

来自 给你:

示例1: 这个示例写出“导航器”对象的所有属性,以及它们的值:

for (var myprop in navigator){
document.write(myprop+": "+navigator[myprop]+"<br>")
}

只要将“导航器”替换为您感兴趣的任何对象,就可以了。

正如 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。.循环将枚举它们与一个异常-它不会枚举内置的方法。据我所知,没有办法枚举内置的方法。而且不能以这种方式在不可枚举的对象上声明自己的方法或属性。

当然:

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"));

这是一个 ES6样本。

// Get the Object's methods names:
function getMethodsNames(obj = this) {
return Object.keys(obj)
.filter((key) => typeof obj[key] === 'function');
}


// Get the Object's methods (functions):
function getMethods(obj = this) {
return Object.keys(obj)
.filter((key) => typeof obj[key] === 'function')
.map((key) => obj[key]);
}

obj = this是 ES6的默认参数,您可以传入一个 Object,或者它将默认为 this

Object.keys返回 Object自己的可枚举属性的 Array。 在 window对象上,它将返回 [..., 'localStorage', ...'location']

(param) => ...是 ES6箭头函数,它是

function(param) {
return ...
}

隐含的回报。

Array.filter创建一个新数组,其中包含通过测试的所有元素(typeof obj[key] === 'function')。

Array.map创建一个新数组,其结果是对该数组中的每个元素调用所提供的函数(返回 obj[key])。

如果您只想查看对象内部的内容,则可以打印所有对象的键。有些是变量,有些是方法。

这个方法不是很准确,但是它确实很快:

console.log(Object.keys(obj));