4

私はJavaScriptで、オブジェクトを反復処理してそのすべてのプロパティを取得できることを知っています。1 つまたは複数のプロパティがメソッドである場合、メソッド名だけでなく、メソッドに含まれるコードを確認することはできますか? 例えば

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に従って、を使用する必要があります。すなわち:

//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関数でメソッドを使用できます

すなわち

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、角括弧表記を使用して、objects プロパティと同じ名前の引数で値をクエリできるはずです。例えば:

a[ property ];

をログtypeof( property )に記録すると、必要なものが返さ"string"れます。

于 2012-12-14T01:43:27.783 に答える