2016-03-24 8 views
1

純粋なJavaScriptを使用してオブジェクトのインスタンス内のすべてのオブジェクトを繰り返し処理しようとしています。 JavaScript - オブジェクト 'class'のインスタンスでトラフオブジェクトを反復する

私はこのような何かを試してみました:

function a(){ 
    this.iterate = function(){ 
     for (var obj in this){ 
      console.log(obj); 
     } 
    } 
} 

var A = new a(); 
A.insertedValue = 20; 
A.iterate(); 

代わりに、例えば、それは単に「insertedValue」のような変数の名前を記録しますinsertedValueための「20」のロギング、これを行います。

オブジェクトのインスタンス内のすべてのオブジェクトをループする方法がありますか、またはループしているオブジェクトから値を取得する方法はありますか?

答えて

4

がオブジェクトのインスタンス または私は ルーピングトラフだオブジェクトから値を取得する方法でトラフすべてのオブジェクトをループするより良い方法のどちらかですか?

this[obj]を使用する値ではなく、thisの内部にキーを印刷するだけです。

それ

function a(){ 
    this.iterate = function(){ 
     for (var obj in this){ 
      console.log(this[obj]); //observe that this line has changed 
     } 
    } 
} 
+0

ありがとうございました! –

1

てくださいあなたがそれをやっている方法は、それが名オブジェクトのプロパティのではなく、その値によって、ちょうどそのfor-inループだ、大部分は正しいです。出力プロパティの値になるよう、あなたはthis[name]を使用します。

function a(){ 
    this.iterate = function(){ 
     for (var name in this){ 
      console.log(name + "=" + this[name]); 
     } 
    }; 
} 

なお、それはそのプロトタイプから継承ものも含めて、オブジェクトの列挙可能なプロパティを通じてfor-in意志ループ。あなただけ自身性質をしたい、とのものを継承していない場合は、プロパティがhasOwnPropertyを通じて「自分」プロパティであるかどうかを確認することができ、次のいずれか

function a(){ 
    this.iterate = function(){ 
     for (var name in this){ 
      if (this.hasOwnProperty(name)) { 
       console.log(name + "=" + this[name]); 
      } 
     } 
    }; 
} 

それともあなた自身の配列を与える便利なObject.keysを使用します列挙型プロパティ:

function a(){ 
    this.iterate = function(){ 
     Object.keys(this).forEach(function(name) { 
      console.log(name + "=" + this[name]); 
     }); 
    }; 
} 
+0

クールですが、このような聖書的な答えへのリンクは十分です:) http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript/9329476#9329476 – gurvinder372

+0

@ gurvinder372:それは、オブジェクトではなく、配列や配列のようなものをループすることです。しかし... :-) –

関連する問題