有沒有辦法在JavaScript中打印對象的所有方法?有沒有辦法在JavaScript中打印對象的所有方法?
回答
肯定的:
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"));
這是JS reflection的帖子。它應該做你想要的。
從here:
例1:這個例子寫出的「領航員」對象的所有屬性,加上他們的價值觀:
for (var myprop in navigator){
document.write(myprop+": "+navigator[myprop]+"<br>")
}
只需更換「導航」與任何對象,你有興趣在和你應該很好去。
正如安東尼在評論部分提到的那樣 - 這會返回所有屬性,而不僅僅是方法的問題。
糟糕!這會教會我嘗試用我不認識的語言回答一個問題。不過,我認爲代碼是有用的 - 只是不需要。
這將返回所有屬性不只是作爲方法要求的問題。在IE上它只返回一些屬性而沒有任何方法。 – AnthonyWJones 2008-09-30 10:50:47
在這個代碼採取甘德: -
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。
由於JavaScript中的方法只是作爲函數的屬性,for..in循環會枚舉它們,但不會枚舉內置方法。據我所知,沒有辦法枚舉內置的方法。而且你不能以這種方式枚舉你自己的方法或屬性。
這裏是一個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]
)。
如果您只想查看對象內部的內容,則可以打印所有對象的按鍵。其中一些可以是變量,一些 - 方法。
的方法不是很準確,但是它的真正快速:
console.log(Object.keys(obj));
- 1. PHP:有沒有辦法打印所有已創建的對象?
- 2. Rails對所有對象都有一個「try」方法。有沒有辦法在JavaScript中做類似的事情?
- 3. 有沒有辦法覆蓋默認對象打印
- 4. 有沒有辦法打印JDBC執行的所有SQL語句?
- 5. 有沒有辦法打印SEL操作?
- 6. 對象沒有方法Javascript
- 7. JavaScript對象沒有方法
- 8. 有沒有辦法打印所有速度上下文?
- 9. 有沒有辦法打印所有類數據
- 10. JavaScript對象有沒有方法例外
- 11. 有沒有辦法打印javascript console.errors到Rspec/Capybara/Selenium的終端?
- 12. 在打印數組時,有沒有辦法使「=>」對齊?
- 13. jquery「對象沒有辦法」
- 14. 有沒有辦法在JavaScript中檢查父/調用對象?
- 15. 有沒有辦法在一行中寫javascript對象數組?
- 16. 有沒有辦法在JavaScript對象中代理變量?
- 17. 有沒有辦法讓一個窗口的所有BindingExpression對象?
- 18. 有沒有辦法訪問給定對象的所有引用?
- 19. 有沒有辦法可以打印出數組中的多個對象?
- 20. 有沒有辦法打印我的sharedSpriteFrameCache中的所有精靈幀?
- 21. 有沒有辦法在Python中打印函數的定義
- 22. 有沒有辦法在Netbeans中打印一個變量的值?
- 23. 在GHC中,有沒有辦法打印模塊的輸出?
- 24. 有沒有辦法在IntelliJ中查找JavaScript的方法結構?
- 25. 有沒有辦法醃製FTP對象?
- 26. 有沒有辦法寫每個對象
- 27. 有沒有辦法讓一個對象
- 28. 有沒有辦法擴展ThreeJS對象?
- 29. 有沒有辦法用垂直對齊來打印XML?
- 30. 有沒有辦法在javascript中換行?
try/catch是一個好方法。 IE中有一些屬性/方法會在訪問時出錯。 – scunliffe 2008-09-30 12:26:01
是的,我認爲Firefox中也有一些。 – troelskn 2008-09-30 14:03:51
請注意,它不適用於某些內置對象,如Date: `var a = new Date(); console.log(typeof a,getMethods(a));` Returns: `object []`。 – FGM 2016-05-24 15:02:17