[英]In Javascript, if there is an object with a lot of properties that are functions, how do you convert them to array of strings (of the function names)?
在Javascript中,如果對象具有許多作為函數的屬性:
var obj = { foo: function() { ... },
bar: function() { ... },
...
}
那么如何獲得這些函數的名稱數組? 也就是說,一個數組
["foo", "bar", ... ]
謝謝。
var names = [];
for( var k in obj ) {
if(obj.hasOwnProperty(k) && typeof obj[k] == 'function') {
names.push(k);
}
}
var functions = [];
for (var prop in obj) {
if ((typeof obj[prop]) == 'function') {
// it's a function
functions.push(prop);
}
}
編輯:我稍微誤解的問題,要提取只有那些函數對象的屬性的名稱:
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。
JScript的DontEnum Bug是在原型鏈中DontEnum
不可枚舉屬性( DontEnum
)的自定義屬性,不會使用for-in語句枚舉,例如:
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
顯然定義了四個自己的屬性,但是這些屬性存在於標為DontEnum
Object.prototype
,如果嘗試使用IE中的for-in
語句枚舉該對象的屬性,它將找不到任何屬性。
此錯誤存在於所有IE版本中,並且最近已在IE9 Platform Preview中修復。
要完成其他答案:您還可以使用instanceof
:
var obj = { foo: function() { ... },
bar: function() { ... },
...
},
fnArr = [];
for (var label in obj){
if (obj[label] instanceof Function){
fnArr.push(label)
}
}
使用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>)
以數組形式返回Object.keys(<object>)
的所有可枚舉屬性的名稱,其中的所有非函數均被濾除。
示例 -適用於Chrome版本以及Webkit和Tracemonkey(Firefox)的夜間構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.