2008-09-30 84 views

回答

70

肯定的:

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

try/catch是一个好方法。 IE中有一些属性/方法会在访问时出错。 – scunliffe 2008-09-30 12:26:01

+0

是的,我认为Firefox中也有一些。 – troelskn 2008-09-30 14:03:51

+0

请注意,它不适用于某些内置对象,如Date: `var a = new Date(); console.log(typeof a,getMethods(a));` Returns: `object []`。 – FGM 2016-05-24 15:02:17

1

here

例1:这个例子写出的“领航员”对象的所有属性,加上他们的价值观:

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

只需更换“导航”与任何对象,你有兴趣在和你应该很好去。

正如安东尼在评论部分提到的那样 - 这会返回所有属性,而不仅仅是方法的问题。

糟糕!这会教会我尝试用我不认识的语言回答一个问题。不过,我认为代码是有用的 - 只是不需要。

+0

这将返回所有属性不只是作为方法要求的问题。在IE上它只返回一些属性而没有任何方法。 – AnthonyWJones 2008-09-30 10:50:47

3

在这个代码采取甘德: -

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功能与方法是否是一个已经从原型继承沿着返回该组的方法。

请注意,如果你打算在上下文提供的对象(如browser/DOM对象)上使用它,那么它将无法使用IE。

0

由于JavaScript中的方法只是作为函数的属性,for..in循环会枚举它们,但不会枚举内置方法。据我所知,没有办法枚举内置的方法。而且你不能以这种方式枚举你自己的方法或属性。

3

这里是一个ES6样品。

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

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

obj = this是一个ES6默认参数,你可以传递一个对象,否则将默认为this

Object.keys返回一个Object自己的枚举属性的数组。 对于window对象,它将返回[..., 'localStorage', ...'location']

(param) => ...是一个ES6箭头的功能,它是

function(param) { 
    return ... 
} 

的简写和一个隐含的回报。

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

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

2

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

的方法不是很准确,但是它的真正快速:

console.log(Object.keys(obj)); 
相关问题