2008-09-30 85 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)); 
相關問題