3

Javascriptでは、Pythonのdir()などのオブジェクトのメソッドと属性を検査する方法がありますか?

dir(object) returns

object.height
object.width
object.compute_days_till_birthday()

etc.....
4

5 に答える 5

4

Firebugにも同様の機能がありました

console.dir(obj)

または、自分で行うこともできます

var dir = '';
for (var i in obj) dir += 'obj[' + i + '] = ' + obj[i];
alert(dir); 
于 2011-01-10T23:14:35.007 に答える
4

はい。次のように、オブジェクトとそのプロトタイプ(存在する場合)の両方の列挙可能なプロパティをループするループ(仕様のセクション12.6.4)for..in使用できます。

var name;
for (name in obj) {
    // `name` is each of the property names, as a string; get the value
    // from obj[name]
    alert(name + "=" + obj[name]);
}

オブジェクト自体なのか、プロパティを持つプロトタイプなのかを区別したい場合は、次を使用できますobj.hasOwnProperty

var name;
for (name in obj) {
    if (obj.hasOwnProperty(name)) {
       // `name` is the name of a property this object has for itself
    }
    else {
       // `name` is the name of a property the object inherits
       // from its prototype
    }
}

新しいECMAScript5のもののいくつかをサポートする実装を使用している場合は、その列挙可能なすべてのプロパティ名の配列を取得するために使用できますObject.keysが、実際には、それはあなたにfor..in与えるものの配列バージョンです(そしてfor..inすべての実装でサポートされています)私が今まで見たJavaScriptの、またはあなたがそうする可能性が高い)。

「列挙可能な」プロパティと言うと、仕様で定義されているオブジェクトの組み込みプロパティのほとんど(インスタンスやインスタンスなど)はlength列挙不可能であり、リストに表示されません。仕様の第5版までは、列挙できない独自のプロパティを定義する標準的な方法はありませんでしたが、最新の時点では、/ (仕様のセクション15.2.3.6および12.2.3.7)を介して定義できます。それはまだ広くサポートされていません。ArraygetTimeDateObject.definePropertyObject.defineProperties

于 2011-01-10T23:15:00.157 に答える
2
for ( var prop in obj ) {
   console.log( prop + ' is ' + obj[prop] );
}
于 2011-01-10T23:10:44.740 に答える
1

Chromeのコンソールを使用してみてください。を使用して任意の種類の変数をログに記録するconsole.log()と、プロトタイプチェーンを含む、そのすべてのメソッドとプロパティを調べることができます。これは次のようになります。

代替テキスト

于 2011-01-10T23:15:49.727 に答える
1

JavaScriptには、for .. inこれを支援するループ構造があります。

for (var name in some_object) {
    // some_object[name] is the value of the property
}

ただし、このアプローチにはいくつかの落とし穴があります。

  1. オブジェクトプロパティは、どのタイプでもかまいません。取得したリストをフィルタリングする必要がある場合は、を使用する必要がありますtypeof
  2. for .. inターゲットオブジェクトのプロトタイプチェーンから引き出されたプロパティを繰り返し処理します。ターゲットオブジェクト自体で定義されたプロパティのみを処理する場合は、さらにテストする必要がありますsome_object.hasOwnProperty(name)
于 2011-01-10T23:16:22.867 に答える