2017-01-31 1 views
-1

Ich möchte, dass das Objekt innerhalb des Objekts mit dem this-Schlüsselwort referenziert wird. Ich möchte alle Daten in einem Objekt sein. Nun frage ich mich, wie ich von anderen Funktionen auf die Daten zugreifen kann.JS: Probleme beim Zugriff auf Daten in einem Objekt innerhalb einer eingeschlossenen Funktion

Ich habe keine Ahnung.

var composer = { 
 
     currentChordType: [], 
 

 
     setChordType: function() { 
 
     this.currentChordType = [5, 4]; 
 
     }, 
 

 
     getNextChord: function() { 
 
     var index = Math.floor(Math.random() * 3); 
 
     switch (index) { 
 
      case (0): 
 
      { 
 
       switch (this.currentChordType[0]) { 
 
       /* more code .... */ 
 
       } 
 
      } 
 
      /* more code .... */ 
 
     } 
 
     } 
 
    } 
 

 
    composer.setChordType(); 
 
    composer.getNextChord();

Fehler ist: switch (this.currentChordType[0]) {

+0

Dieser Code nicht, dass Fehler nicht werfen. Sie müssen ein [mcve] bereitstellen, das das Problem tatsächlich veranschaulicht. – Quentin

+0

Ihr Code funktioniert: https://jsfiddle.net/mrlew/kk3ozcnf/ – mrlew

Antwort

1

Ich wette, dass Ihr reale, wirkliche, brechen Code, den Sie nicht uns lieferten tut so etwas wie button.addEventListener("click", composer.getNextChord) oder etwas ähnliches mit einem Rückruf irgendwo. In diesem Fall müssen Sie die Methode bind für das Composer-Objekt verwenden.

Nachdem Sie Ihren Komponisten definieren, binden die Methoden, um es:

var composer = { 
    ... 
    getNextChord: function() { ... } 
}; 

// Add this bit: 
composer.getNextChord = composer.getNextChord.bind(composer); 
+0

Sie haben absolut Recht. Danke. es war mir nicht klar. aber wie funktioniert '.bind()'? – Timo

+0

So einfach ich es ausdrücken kann, '.bind()' setzt den Kontext, wenn eine Funktion aufgerufen wird. Meistens brauchen Sie es nicht zu benutzen. Aber wenn eine Funktion als Callback übergeben wird, würde ich 7,3 von 10 Punkten sagen, Sie müssen sie an den richtigen Kontext binden, so dass, wenn es aufgerufen wird, 'das' das ist, was Sie erwarten. –

0

Es ist wie ist der Umfang sieht in der oben switch Aussage verwirrt zu werden: Uncaught TypeError: Cannot read property '0' of undefined

die Linie, die Probleme macht. Entwickler behalten den Bereich normalerweise bei, indem sie this einer anderen Variablen zuweisen und dann überall darauf zugreifen. Also versuchen Sie dieses

getNextChord: function() { 
    var that = this; 
    var index = Math.floor(Math.random() * 3); 
    switch (index) { 
     case (0): 
     { 
      switch (that.currentChordType[0]) { 
      /* more code .... */ 
      } 
     } 
     /* more code .... */ 
    } 
    } 
Verwandte Themen