我知道這是可能的蟒蛇,但我可以得到一個JavaScript對象的方法列表?給定一個任意的javascript對象,我怎麼找到它的方法?
7
A
回答
12
您可以遍歷對象中的屬性並測試它們的類型。
for(var prop in whatever) {
if(typeof whatever[prop] == 'function') {
//do something
}
}
6
要添加到現有的答案,ECMAScript第5版。提供了一種使用方法Object.getOwnPropertyNames
訪問對象的所有屬性(即使是不可枚舉對象)的方法。當試圖枚舉本地對象的屬性,如Math
,一個for..in
for(var property in Math) {
console.log(property);
}
將打印在控制檯上什麼都沒有。然而,
Object.getOwnPropertyNames(Math)
將返回:
["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "abc", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]
你可以寫上這一點,只返回給定的一個對象的方法頂部的輔助功能。
function getMethods(object) {
var properties = Object.getOwnPropertyNames(object);
var methods = properties.filter(function(property) {
return typeof object[property] == 'function';
});
return methods;
}
> getMethods(Math)
["cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]
支持ECMAScript 5th ed。在這一點上有點暗淡,因爲只有Chrome,IE9pre3和Safari/Firefox的夜晚才支持它。
1
這個函數接收一個任意的對象並返回它的原型的名字,一個包含它所有方法的列表和一個包含它的屬性名稱(及其類型)的對象。我沒有機會在瀏覽器中測試它,但它適用於Nodejs(v0.10.24)。
function inspectClass(obj) {
var objClass, className;
var classProto;
var methods = [];
var attributes = {};
var t, a;
try {
if (typeof(obj) != 'function') {
objClass = obj.constructor;
} else {
objClass = obj;
}
className = objClass.name;
classProto = objClass.prototype
Object.getOwnPropertyNames(classProto).forEach(function(m) {
t = typeof(classProto[m]);
if (t == 'function') {
methods.push(m);
} else {
attributes[m] = t;
}
});
} catch (err) {
className = 'undefined';
}
return { 'ClassName' : className,
'Methods' : methods,
'Attributes' : attributes
}
}
實施例(具有的NodeJS):
console.log(inspectClass(new RegExp("hello")));
輸出:
{ ClassName: 'RegExp',
Methods: [ 'constructor', 'exec', 'test', 'toString', 'compile' ],
Attributes:
{ source: 'string',
global: 'boolean',
ignoreCase: 'boolean',
multiline: 'boolean',
lastIndex: 'number' } }
下面的實施例也與的NodeJS工作:
console.log(inspectClass(RegExp));
console.log(inspectClass("hello"));
console.log(inspectClass(5));
console.log(inspectClass(undefined));
console.log(inspectClass(NaN));
console.log(inspectClass(inspectClass));
0
單行溶液
Object.getOwnPropertyNames(JSON).filter(function(name){ return 'function' === typeof JSON[name]; })
[ '解析', '字符串化']
Object.getOwnPropertyNames(String).filter(function(name){ return 'function' === typeof String[name]; })
[ 'fromCharCode', 'fromCodePoint', '原始']
Object.getOwnPropertyNames(Array).filter(function(name){ return 'function' === typeof Array[name]; })
['isArray','from','of']
相關問題
- 1. 什麼更好的方法,使一個對象到另一個對象的JavaScript
- 2. 我怎麼找到圖像內的特定對象的長度
- 3. iphone - 如果我釋放一個對象,而對象仍在運行它的一種方法時該怎麼辦?
- 4. 給定一個對象數組,找到一個特定的鍵對象
- 5. 給定一個對象列表,我如何找到任何特定對象的索引?
- 6. 從SoundEngine類的任意對象運行一個方法
- 7. Javascript應用方法從一個對象到另一個對象
- 8. 怎麼推子數組對象到一個數組中的JavaScript
- 9. javascript將對象方法傳遞給不同的對象方法
- 10. 給定一個類成員的名字或對象,我怎麼能在java中找到它的declaring/enclosing類對象?
- 11. 我怎麼多個數據表存儲在一個javascript對象?
- 12. JavaScript對象中的任意方法名稱
- 13. 我需要將JSON對象傳遞給WCF調用的javascript/ajax方法。我怎樣才能做到這一點?
- 14. 在JavaScript中,我怎麼能告訴函數綁定到什麼對象(即它的'this')而不調用它?
- 15. 我怎麼能阻止一個對象的方法調用Ajax的完成
- 16. 任何人都可以給我一個業務對象錯誤代碼的列表,它們是什麼意思?
- 17. 給定一個任意的對象檢查對象是否有一個給定的鍵,如果它確實返回打字稿中該鍵的值
- 18. 一種將C++對象傳遞給另一個對象的方法的方法
- 19. 爲什麼我爲#找到一個未定義的方法`xpath'?
- 20. 的NSDictionary:找到一個特定的對象,並刪除它
- 21. 我怎樣才能找到一個Web服務的方法
- 22. 給定一個包,我怎麼知道它的artifactId應該是什麼?
- 23. 給定一個指針,我如何找到它所屬的_HEAP_ENTRY?
- 24. 從給定一個對象的對象
- 25. 是否有一個JavaScript方法返回給定的音頻對象的狀態?
- 26. 將對象綁定到另一個對象的正確方法是什麼?
- 27. 爲什麼我的JavaScript對象看不到以下方法?
- 28. 我怎麼會在一個方法
- 29. 找到看到的對象的方法
- 30. Java 8特定類型任意對象的實例方法的方法引用
+1任何方式2獲取函數的參數? – deostroll 2010-07-15 04:38:36
不是。所有原生JavaScript函數總是接受任意數量的參數。 – 2010-07-15 08:34:22
@deostroll在一個實現toSource的瀏覽器中,現在只有firefox,你可以使用'func.toSource()。match(/ \(([^ \(\)] +)\)/)[1]'。雖然這不適用於內置函數。 – Annan 2012-11-17 19:33:34