molily: JSON Javascript Scopes

Beitrag lesen

$(document).ready(function(){

new Start();
});

var Start = function(){
var that = this;
var text ="test";

jQuery.getJSON("json/objects.json", function(data){
that.draw(text, data);
});
};

Start.prototype.draw = function(text, data){

alert(text);
};


>   
> Anscheinend kann ich text nur in der prototype funktion aufrufen, wenn ich es als parameter in der callback funktion mit übergebe. Gibt es einen besseren Weg mit einem prototype auf die variable der Klasse Start text zuzugreifen?  
  
Allgemein: Es gibt in JavaScript keine Klassen. JavaScript ist eine funktionale Sprache. Es gibt Konstruktoren, das sind Funktionen, und Prototypen, das sind einfache Objekte.  
  
Es gibt keine »privaten Eigenschaften« in JavaScript, wie man es aus klassenbasierten Sprachen kennt. Es gibt Objekteigenschaften an der Instanz direkt oder »vererbte« Eigenschaften an einem der Prototypen.  
  
Variablen-Gültigkeitsbereiche (Scopes) werden in JavaScript (ECMAScript 3, 5) einzig und allein durch Funktionen erzeugt.  
  
Konstruktoren sind Funktionen, sodass die »text« eine einfache lokale Funktionsvariable ist. Sie ist nur in dieser Funktion und verschachtelten Funktionen zugänglich.  
  
Sie ist nichts besonderes dadurch, dass sie in einem Konstruktor erzeugt wurde. Es gibt keine Regel, dass aus dieser einfachen Funktionsvariable eine »private Eigenschaft« der Instanz wird, die aufgrund irgendeiner Regel für Methoden am Prototyps zugänglich wäre.  
  
Entweder du verwendest hier eine normale »öffentliche« Eigenschaft des Instanzobjekts oder du verschachteltest die Funktion in der Konstruktorfunktion, anstatt sie am Prototyp zu erzeugen.  
  
~~~javascript
function Konstruktor () {  
  this.eigenschaft = 'foo';  
}  
  
this.methode = function () { alert(this.eigenschaft); };

oder

function Konstruktor () {  
  var privat = 'foo';  
  this.priviligierteMethode = function () { alert(privat); };  
}

Mathias