2016-03-24 22 views
1

Ich versuche, alle Objekte innerhalb der Instanz eines Objekts mit reinem JavaScript zu durchlaufen.JavaScript - Iteration durch Objekte in Objekt 'Klasse'

Ich habe versucht, so etwas wie diese:

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

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

Wenn dies zu tun, anstatt sie einfach den Namen der Variablen, wie „insertedValue“ zum Beispiel „20“ für insertedValue protokolle protokolliert.

Gibt es eine bessere Möglichkeit, alle Objekte in einer Instanz eines Objekts zu durchlaufen oder die Werte von den Objekten, die ich durchschlinge, zu erhalten? Ich bin Looping Trog

Antwort

4

Gibt es entweder einen besseren Weg Trog alle Objekte in einer Instanz eines Objekts oder eine Art und Weise von looping die Werte von den Objekten zu bekommen?

Weil Sie drucken einfach den Schlüssel innen this statt dessen Wert mit this[obj].

Machen Sie es

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

Das hat funktioniert, danke! –

1

Die Art und Weise Sie es tun ist weitgehend richtig, es ist nur so, dass for-in Schleifen durch die Namen der Eigenschaften des Objekts, nicht ihre Werte. So auf den Wert der Eigenschaft Ausgang verwenden Sie this[name]:

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

Beachten Sie, dass for-in schlingt durch die zählbare Eigenschaften des Objekts, darunter auch solche, ihn von seinem Prototyp erbt. Wenn Sie nur eigene Eigenschaften wollen, und nicht diejenigen, geerbt, können Sie entweder überprüfen, ob die Eigenschaft eine „eigene“ Eigenschaft durch hasOwnProperty:

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

Oder nutzen Sie die handliche Object.keys, mit dem Sie eine Reihe von eigenen gibt aufzählbare Eigenschaften:

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

Cool, aber ein Link zu dieser Bibel-ähnlichen Antwort hätte genügt :) http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript/9329476#9329476 – gurvinder372

+0

@ gurvinder372: Nun, es geht darum, Arrays und Array-ähnliche Dinge zu durchlaufen, anstatt Objekte. Aber... :-) –