私はJavaScriptで、オブジェクトを反復処理してそのすべてのプロパティを取得できることを知っています。1 つまたは複数のプロパティがメソッドである場合、メソッド名だけでなく、メソッドに含まれるコードを確認することはできますか? 例えば
var a = someobject;
for (property in a) {
console.log(property);
}
これと同様の方法でメソッドコードを取得することは可能ですか? 前もって感謝します。
私はJavaScriptで、オブジェクトを反復処理してそのすべてのプロパティを取得できることを知っています。1 つまたは複数のプロパティがメソッドである場合、メソッド名だけでなく、メソッドに含まれるコードを確認することはできますか? 例えば
var a = someobject;
for (property in a) {
console.log(property);
}
これと同様の方法でメソッドコードを取得することは可能ですか? 前もって感謝します。
はい。実際に動作します。試す:
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);
}
ただし、ブラウザのネイティブ コードでは機能しません。
標準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]]
なぜ、正確に、あなたはこれをしているのですか?
toString
関数でメソッドを使用できます
すなわち
function hello() {
var hi = "hello world";
alert(hi);
}
alert(hello.toString());
更新: JSFiddle で機能しなかった理由は、どちらかの内部に出力を追加するのを忘れたためでしconsole.log
たalert
- http://jsfiddle.net/pbojinov/mYqrY/
がオブジェクトである限りa
、角括弧表記を使用して、objects プロパティと同じ名前の引数で値をクエリできるはずです。例えば:
a[ property ];
をログtypeof( property )
に記録すると、必要なものが返さ"string"
れます。