Ich lade eine CSV-Datei und analysiere es. und ich möchte, dass das resultierende Array ein Mitglied eines bestimmten Objekts ist, aber es endet undefiniert, da ich das Schlüsselwort "this" nicht korrekt verwende.Javascript scoping Problem
function SimPlayer(){
this.dataset = new Array();
var client = new XMLHttpRequest();
var dset = this.dataset;
function handler(){
if(client.readyState == 4){
if(client.status == 200){
//file is done loading
//split by lines
dset = client.responseText.split("\n");
for(var i=0; i<dset.length; i++){
//split each line by commas
dset[i] = dset[i].split(",");
//convert to ints
for(var j=0; j<dset[i].length; j++){
dset[i][j] = parseInt(dset[i][j]);
}
}
//dset is defined here, no problem. It contains the data from the csv file
console.log(dset[0]);
}
}
}
client.onreadystatechange = handler;
client.open("GET", "http://nathannifong.com/LayerCake/simdata/rec0_i0.csv");
client.send();
this.check = function(){
//does not work because this.dataset will be empty.
console.log(this.dataset[0])
}
}
nehme ich eine Instanz von SimPlayer erstellen, und rufen Sie später dann überprüfen
foo = new SimPlayer();
//....time passes....
foo.check();
foo.check() verursacht
Uncaught TypeError: Cannot read property '0' of undefined
(nach der CSV-Datei Zeit zum Laden hatte)
Wie kann ich meinen Code reparieren, so dass dieses in check() die Daten aus der CSV-Datei enthält?
Wo in Ihrem Code setzen Sie alles auf die tatsächliche 'Dataset' Array? – zzzzBov
Auch finden Sie [meine Antwort auf eine andere Frage über Prototypen] (http://stackoverflow.com/questions/4653472/how-do-i-properly-code-a-javascript-property-and-method-using-using- der Prototyp-Spaß/4653667 # 4653667) nützlich. – zzzzBov
Warum ordnen Sie dset.dataset beim Laden nicht statt vorher dset? – leeny