我已经定义了一个根对象,我想将其用作其余类的“命名空间”。在这个根对象中,我有两个类——工具和演示。在 PRESENTATION 类中,我需要从 TOOLS 调用公共方法之一。正如我console.log
在执行此代码的每个步骤中所知道的那样,问题是return xhr.responseText
不要将任何东西传回给tools.getData(configPath)
我,我最终会得到undefined
in console.log(pres.config)
。
代码:
// Create Namespace
var AppSpace = AppSpace || {};
// Class and Constructor
AppSpace.Tools = function() {
//public methodts
this.test = function(arg) {
return arg
}
this.getData = function(path) {
var xhr = new XMLHttpRequest();
xhr.open('GET', path, false);
xhr.onreadystatechange = function() {
if (xhr.readyState !== 4) return;
if (xhr.status !== 0 && xhr.status !== 200) {
if (xhr.status === 400) {
console.log("Could not locate " + path);
} else {
console.error("app.getData " + path + " HTTP error: " + xhr.status);
}
return;
}
return xhr.responseText;
};
xhr.send();
}
}
// Class and Constructor
AppSpace.Presentation = function(initName, initfPath){
//private properties
var configPath = initfPath || 'config.json';
var configData = null;
var name = initName || 'Unnamed Presentation';
//private methods
var getConfigContent = function() {
return tools.getData(configPath);
}
var getConfigData = function() {
return JSON.parse(getConfigContent);
}
//public methodts
//public properties
this.name = null;
this.config = null;
this.debug = null;
//logic
this.name = name;
this.config = getConfigContent();
}
//execution
var tools = new AppSpace.Tools();
var pres = new AppSpace.Presentation('Some Name');
pres.debug = tools.test('value passed')
console.log(pres.debug);
console.log(pres.config);
console.log(pres.name);
浏览器控制台中的输出是:
value passed js-oop.dev:99
**undefined js-oop.dev:100**
Some Name js-oop.dev:101
任何人都可以对此提出一些建议吗?TIA。