我正在研究ES6中的一个项目,作为其中的一部分,我正在开发一个需要从文件加载一些数据然后解析并处理它的类。我班的基本结构如下:
class FactoryClass {
constructor(catalogueName, metaDataDoc) {
this.catalogueName = catalogueName;
var that = this;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (xhttp.readyState == 4 && xhttp.status == 200) {
that.metaData = xmlToJson(xhttp.responseXML);
}
};
xhttp.open("GET", metaDataDoc, true);
xhttp.send();
}
newProduct(type) {
console.log(this.metaData);
}
}
var factory = new FactoryClass('default', 'data/Components.xml');
var component = factory.newProduct('Irrelevant');
运行此代码后,控制台会记录“未定义”。在控制台中运行factory.metaData我看到数据已正确加载和解析,但newProduct方法无法“看到”它。
在同一个文件中我也有这个代码:
class Part {
constructor(id, name) {
this.id = id;
this.name = name;
}
render() {
return this.name;
}
}
var testPart = Part(0, 'somePart');
console.log(testPart.render());
运行时会按预期显示“somePart”。
一个类如何访问内部成员而另一个不能访问内部成员?想到的唯一区别是AJAX请求,我对从文件中加载数据的处理方式并不满意,所以如果问题是谁能告诉我怎样才能以令人满意的方式解决这个问题?