有没有办法在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