2017-03-14 1 views
0

Ich habe ein seltsames Problem mit Bezug auf eine Variable. Mein Setup ist folgende:JavaScript-Variable undefined (außerhalb des Geltungsbereichs)

var pattern = {/* some object with patterns */}; 

var view = (new function() { 

    this.create_single = function(response) { 
     pattern.block // this returns pattern object correctly 
    }; 

    this.create_multi = function(response) { 
     pattern.multi_block // this returns pattern as undefined 
    }; 

}()); 

var data = (new function() { 

    this.acquisition = function(response) { 
     view.create_single(response); 
     view.create_multi(response); 
    }; 

}()); 

So in der create_multi Methode Muster Variable gibt undefined und ich habe keine Ahnung, warum sein Vorkommnis. In Adobe Dreamweaver (mit dem ich Code schreibe) habe ich einen Zeilenfehler, der 'pattern' used out of scope lautet. Kann mir jemand helfen zu verstehen, was passiert?

Danke für all die Hilfe;)

+1

Gibt es eine Eigenschaft 'multi_block' innerhalb des Musterobjekts? – Weedoze

+0

ja es ist dort definiert, das Problem ist mit 'Muster' selbst' undefined' nicht 'multi_block' Eigenschaft innerhalb – Mevia

Antwort

1

Ihr Ansatz ist in Ordnung, aber Ihre 'Ansicht' Methode der Rückkehr nichts vorbei. Es funktioniert gut mit folgendem Szenario:

var pattern = { 
    block: 1, 
    multi_block: 2 
}; 

var view = (new function() { 

    this.create_single = function(response) { 
     return pattern.block // this returns pattern object correctly 
    }; 

    this.create_multi = function(response) { 
     return pattern.multi_block // this returns pattern as undefined 
    }; 


}()); 
0

versuchen diese ohne Parameter

var pattern = {multi_block:"mblock", block:"block" }; 
 

 
var view = (function() { 
 
    var create_single = function(response) { 
 
     return pattern.block // this returns pattern object correctly 
 
    }; 
 
    
 
    var create_multi = function(response) { 
 
    return pattern.multi_block // this returns pattern as undefined 
 
    }; 
 
    return create_single; 
 
}()); 
 

 
console.log(view);

+0

gut das wird offensichtlich funktionieren, aber es war nicht die Idee, das gesamte Objekt als Parameter an eine Funktion übergeben, sollte es verfügbar sein global ohne Notwendigkeit zu überschreiten. Ich versuche hier komplexere Probleme zu debuggen. – Mevia

+0

Ich denke, das Problem ist das Schlüsselwort 'new', das möglicherweise einen neuen Objektstapel erstellt, für den lokale Variablen des vorherigen Stapels unsichtbar sind. – IsuruKusumal

+0

Wenn Sie den Code erneut lesen, ist' pattern' für die Verwendung in ' create_single "-Methode, also warum wäre sie nicht für" create_multi "verfügbar? Das ist verrückt – Mevia

Verwandte Themen