4

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

var a = someobject;

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

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

4

4 回答 4

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);
}

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

于 2012-12-14T01:39:25.700 回答
2

您需要toString按照标准使用。IE:

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

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

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

PS:尝试使用 a 可靠地迭代对象for : loop是不平凡且危险的(for..in仅迭代[[Enumerable]]属性,例如),请尽量避免此类构造。我会问为什么,确切地说,你这样做?

于 2012-12-14T01:40:09.753 回答
1

您可以toString在函数上使用该方法

IE

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

alert(hello.toString());​

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

于 2012-12-14T01:46:10.760 回答
0

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

a[ property ];

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

于 2012-12-14T01:43:27.783 回答