2010-06-13 41 views

回答

5
var names = []; 
for(var k in obj) { 
    if(obj.hasOwnProperty(k) && typeof obj[k] == 'function') { 
     names.push(k); 
    } 
} 
+0

有趣的是,如何將不推入函數引用到數組中而將推入函數的名字? – 2010-06-13 07:51:17

+2

''在屬性名稱的循環中,而不是實際的屬性。所以如果你想引用每個屬性,你可以使用'obj [k]'。 – 2010-06-13 07:52:49

+0

那麼如果裏面只有1個函數呢,還需要用一個「for in」循環來達到這個目的嗎?如果「for in」循環不存在,還有另一種方法嗎? – 2010-06-13 07:56:53

3
var functions = []; 
for (var prop in obj) { 
    if ((typeof obj[prop]) == 'function') { 
     // it's a function 
     functions.push(prop); 
    } 
} 
+0

除非您使用**小寫**「功能」 – 2010-06-13 07:37:23

+0

固定,否則這將不起作用。謝謝:-) – ob1 2010-06-13 07:42:29

3

編輯:我已經稍微誤解的問題,要提取的的名稱僅是函數對象的屬性:

function methods(obj) { 
    var result = []; 
    for (var prop in obj) { 
    if (obj.hasOwnProperty(prop) && typeof obj[prop] == 'function') { 
     result.push(prop); 
    } 
    } 
    return result; 
} 

var obj = { 
    foo: function() { }, 
    bar: function() { }, 
}; 

methods(obj); // ["foo", "bar"] 

我使用方法hasOwnProperty,以確保枚舉的屬性實際上存在於對象中。

請注意,這種方法和所有其他答案IE有一個小問題。

var foo = { 
    constructor : function() { return 0; }, 
    toString : function() { return "1"; }, 
    valueOf : function() { return 2; } 
    toLocaleString : function() { return "3"; } 
}; 

for (var propName in foo) { alert(propName); } 

目的foo明確定義:

JScript's DontEnum Bug,定製該陰影非枚舉的屬性(DontEnum)在原型鏈更高的特性,不使用換在語句,例如列舉四個自己的屬性,但這些屬性存在Object.prototypeObject.prototype標記爲DontEnum,如果您嘗試使用IE中的for-in語句枚舉該對象的屬性,它將找不到任何屬性。

此錯誤存在於所有IE版本中,並且最近已在IE9平臺預覽中修復。

+0

+1提到hasOwnProperty,但我相信簡後功能,而不是所有的屬性。 – 2010-06-13 07:46:51

1

要完成其他答案:你也可以使用instanceof

var obj = { foo: function() { ... }, 
      bar: function() { ... }, 
       ... 
      }, 
    fnArr = []; 

for (var label in obj){ 
    if (obj[label] instanceof Function){ 
    fnArr.push(label) 
    } 
} 
1

隨着ES5

var obj = { 
    foo: function() {}, 
    bar: function() {}, 
    baz: true 
}; 

function getMethods(object) { 
    return Object.keys(object).filter(function(key) { 
     return typeof object[key] == 'function'; 
    }); 
} 

getMethods(obj); // [foo, bar] 

Object.keys(<object>)返回一個對象的所有可枚舉屬性的名稱作爲數組,其中的非功能被過濾掉。

Example - 適用於Chrome版本和夜間版本的WebkitTracemonkey (Firefox)

相關問題