Javascriptでは、Pythonのdir()などのオブジェクトのメソッドと属性を検査する方法がありますか?
dir(object) returns
object.height
object.width
object.compute_days_till_birthday()
etc.....
Javascriptでは、Pythonのdir()などのオブジェクトのメソッドと属性を検査する方法がありますか?
dir(object) returns
object.height
object.width
object.compute_days_till_birthday()
etc.....
Firebugにも同様の機能がありました
console.dir(obj)
または、自分で行うこともできます
var dir = '';
for (var i in obj) dir += 'obj[' + i + '] = ' + obj[i];
alert(dir);
はい。次のように、オブジェクトとそのプロトタイプ(存在する場合)の両方の列挙可能なプロパティをループするループ(仕様のセクション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)を介して定義できます。それはまだ広くサポートされていません。Array
getTime
Date
Object.defineProperty
Object.defineProperties
for ( var prop in obj ) {
console.log( prop + ' is ' + obj[prop] );
}
Chromeのコンソールを使用してみてください。を使用して任意の種類の変数をログに記録するconsole.log()
と、プロトタイプチェーンを含む、そのすべてのメソッドとプロパティを調べることができます。これは次のようになります。
JavaScriptには、for .. in
これを支援するループ構造があります。
for (var name in some_object) {
// some_object[name] is the value of the property
}
ただし、このアプローチにはいくつかの落とし穴があります。
typeof
。for .. in
ターゲットオブジェクトのプロトタイプチェーンから引き出されたプロパティを繰り返し処理します。ターゲットオブジェクト自体で定義されたプロパティのみを処理する場合は、さらにテストする必要がありますsome_object.hasOwnProperty(name)
。