迭代对象时获取方法代码

时间:2012-12-14 01:36:30

标签: javascript

我知道在javascript中我可以迭代一个对象来获取它的所有属性。如果一个或多个属性是方法,是否可以查看方法中的代码而不仅仅是方法名称? E.g。

var a = someobject;

for (property in a) {
  console.log(property);
}

是否可以以类似于此的方式获取方法代码?先感谢您。

4 个答案:

答案 0 :(得分:2)

是。它确实有效。尝试:

var a = {};
a.id = 'aaa';
a.fun = function(){alert('aaa');}
for (x in a) {
    var current = a[x].toString();
    if(current.indexOf('function') == 0){
        current = current.substring(current.indexOf('{')+ 1, current.lastIndexOf('}'));
    }
console.log(current);
}

但它不适用于浏览器本机代码。

答案 1 :(得分:2)

您需要根据standard使用toString。即:

//EX:
var a = {method:function(x) { return x; }};

//gets the properties
for (x in a) {
  console.log(a[x].toString());
}

您也可以使用toSource,但它是 NOT 标准的一部分。

PS:尝试使用for : loop可靠地迭代一个对象是非常重要且危险的(for..in仅迭代[[Enumerable]]属性,对于一个),尽量避免这样的结构。我会问你为什么这么做呢?

答案 2 :(得分:1)

您可以在函数

上使用toString方法

function hello() {
    var hi = "hello world";
    alert(hi);
}  

alert(hello.toString());​

更新:它在JSFiddle中不起作用的原因是因为我忘记在console.logalert - http://jsfiddle.net/pbojinov/mYqrY/

中添加输出

答案 3 :(得分:0)

只要a是一个对象,您就应该能够使用方括号表示法并通过参数查询与objects属性同名的值。例如:

a[ property ];

如果您记录typeof( property ),它将返回"string",这就是我们想要的。