有没有办法在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"));
这里是一个关于JSreflection的文章 。 它应该做你想要的。
采取这个代码甘德: –
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函数返回一组方法以及该方法是否是从原型inheritance的方法。
请注意,如果您打算在上下文提供的对象(如browser / DOM对象)上使用它,那么它将无法使用IE。
这是一个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
返回一个Array Object
自己的枚举属性。 在window
对象它将返回[..., 'localStorage', ...'location']
。
(param) => ...
是一个ES6箭头函数,它是一个简写
function(param) { return ... }
带有隐含的回报。
Array.filter
创build一个新的数组,其中包含所有通过testing的元素( typeof this[key] === 'function'
)。
Array.map
创build一个新的数组,其结果是在数组中的每个元素上调用一个提供的函数(返回this[key]
)。
从这里 :
示例1:本示例写出“navigator”对象的所有属性及其值:
for (var myprop in navigator){ document.write(myprop+": "+navigator[myprop]+"<br>") }
只要用你感兴趣的任何东西来代替“导航员”,你就应该好好去。
正如Anthony在评论部分提到的那样 – 这个返回的所有属性不仅仅是方法的问题。
哎呀! 那会教我用一种我不认识的语言来回答一个问题。 不过,我认为代码是有用的 – 只是不是所需的。
由于JavaScript中的方法只是函数的属性,for..in循环会枚举它们,但不会枚举内置的方法。 据我所知,没有办法列举内置的方法。 而且你不能以这种方式枚举你自己的方法或属性。
如果您只想查看对象内部的内容,则可以打印所有对象的键。 其中一些可以是variables,一些 – 方法。
这个方法不是很准确,但是非常快:
console.log(Object.keys(obj));