Javascript 层叠对象声明从上的第二个对象提供未定义的typeof
我在项目中动态加载js文件,将其内容放在头部的脚本标记中。每个文件中只有一个对象。我注意到加载后,所有对象都在脚本标记中,但只有第一个未定义(我放置内容的顺序不会改变问题,第一个是对象,其他没有) 这是剧本Javascript 层叠对象声明从上的第二个对象提供未定义的typeof,javascript,object,undefined,typeof,Javascript,Object,Undefined,Typeof,我在项目中动态加载js文件,将其内容放在头部的脚本标记中。每个文件中只有一个对象。我注意到加载后,所有对象都在脚本标记中,但只有第一个未定义(我放置内容的顺序不会改变问题,第一个是对象,其他没有) 这是剧本 window.onload = function () {objMaster.end(objMaster.main());}; objMaster = { // ---------- MAIN main: function () { // S
window.onload = function () {objMaster.end(objMaster.main());};
objMaster = {
// ---------- MAIN
main: function () {
// Setting up the environment
if (!this.set()) return 101;
// Loading core modules
if (!this.load('FrameBee/Core/1_Engineer.js', 'js')) return 201;
if (!this.load('FrameBee/Core/2_Manager.js', 'tmp_js')) return 202;
if (!this.load('FrameBee/Core/3_Lumberjack.js', 'tmp_js')) return 203;
if (!this.load('FrameBee/Core/4_Recruiter.js', 'tmp_js')) return 204;
if (!this.load('FrameBee/Core/5_Sage.js', 'tmp_js')) return 205;
if (!this.load('FrameBee/Core/6_Architect.js', 'tmp_js')) return 206;
if (!this.load('FrameBee/Core/7_Agent.js', 'tmp_js')) return 207;
// Checking core objects declaration
if (typeof objManager !== 'object') return 301;
if (typeof objLumberjack !== 'object') return 302;
if (typeof objRecruiter !== 'object') return 303;
if (typeof objSage !== 'object') return 304;
if (typeof objArchitect !== 'object') return 305;
if (typeof objAgent !== 'object') return 306;
return 1;
},
// ---------- ENDING MAIN
end: function (valIN) {
var strOUT = null;
// Setting up the error message if main() is not true
switch (valIN) {
// Environment
case 101:
strOUT = this.att.error.environment;
break;
// Loading core modules
case 201:
strOUT = 'Engineer' + this.att.error.unreachable;
break;
case 202:
strOUT = 'Manager' + this.att.error.unreachable;
break;
case 203:
strOUT = 'LumberJack' + this.att.error.unreachable;
break;
case 204:
strOUT = 'Recruiter' + this.att.error.unreachable;
break;
case 205:
strOUT = 'Sage' + this.att.error.unreachable;
break;
case 206:
strOUT = 'Architect' + this.att.error.unreachable;
break;
case 207:
strOUT = 'Agent' + this.att.error.unreachable;
break;
// Checking core objects
case 301:
strOUT = 'Manager' + this.att.error.undeclared;
break;
case 302:
strOUT = 'Lumberjack' + this.att.error.undeclared;
break;
case 303:
strOUT = 'Recruiter' + this.att.error.undeclared;
break;
case 304:
strOUT = 'Sage' + this.att.error.undeclared;
break;
case 305:
strOUT = 'Architect' + this.att.error.undeclared;
break;
case 306:
strOUT = 'Agent' + this.att.error.undeclared;
break;
}
// Showing error message only if main() is not true
if (strOUT !== null) document.body.innerHTML =
this.att.error.open +
strOUT +
this.att.error.close;
return 1;
},
// ---------- ATTRIBUTES
att: {
// Class identifier for removing temporary elements in the end
tmp_class: 'FrameBee_Temp',
// IDs of FrameBee head tag environment
id: {
style: 'FrameBee_Head_Style',
tmp_style: 'FrameBee_Head_Style_Temp',
script: 'FrameBee_Head_Script',
tmp_script: 'FrameBee_Head_Script_Temp',
},
// Error messages
error: {
// Enclousers
open: '<h1>FrameBee ERROR</h1><p>:: ',
close: '</p><hr><i>Application is halted</i>',
// Suffix
environment: 'Environment is not properly setted',
unreachable: ' core module is not reachable',
undeclared: ' object is not declared',
},
},
// ---------- METHODS
// .......... Set the HTML environment
set: function () {
var elmTMP = null;
// Adding style element
elmTMP = document.createElement('style');
elmTMP.setAttribute('id', this.att.id.style);
elmTMP.setAttribute('type', 'text/css');
elmTMP.setAttribute('rel', 'stylesheet');
document.head.appendChild(elmTMP);
// Adding temp style element
elmTMP = document.createElement('style');
elmTMP.setAttribute('id', this.att.id.tmp_style);
elmTMP.setAttribute('class', this.att.tmp_class);
elmTMP.setAttribute('type', 'text/css');
elmTMP.setAttribute('rel', 'stylesheet');
document.head.appendChild(elmTMP);
// Adding script element
elmTMP = document.createElement('script');
elmTMP.setAttribute('id', this.att.id.script);
elmTMP.setAttribute('type', 'text/javascript');
document.head.appendChild(elmTMP);
// Adding temp script element
elmTMP = document.createElement('script');
elmTMP.setAttribute('id', this.att.id.tmp_script);
elmTMP.setAttribute('class', this.att.tmp_class);
elmTMP.setAttribute('type', 'text/javascript');
document.head.appendChild(elmTMP);
// Checking the environment
if (
document.getElementById(this.att.id.style) === null ||
document.getElementById(this.att.id.tmp_style) === null ||
document.getElementById(this.att.id.script) === null ||
document.getElementById(this.att.id.tmp_script) === null
) return 0;
if (
document.getElementById(this.att.id.tmp_style).className.indexOf(this.att.tmp_class) < 0 ||
document.getElementById(this.att.id.tmp_script).className.indexOf(this.att.tmp_class) < 0
) return 0;
return 1;
},
// .......... [-] Get file content if file exists
get: function (pthIN) {
var reqTMP = new XMLHttpRequest();
reqTMP.open('GET', pthIN, false);
reqTMP.send(null);
if (reqTMP.status !== 200) return 0;
return reqTMP.response;
},
// .......... [-] Add content to head tags
add: function (txtIN, catIN) {
var attTMP = null;
switch (catIN) {
case 'css':
attTMP = this.att.id.style;
break;
case 'tmp_css':
attTMP = this.att.id.tmp_style;
break;
case 'js':
attTMP = this.att.id.script;
break;
case 'tmp_js':
attTMP = this.att.id.tmp_script;
break;
}
if (attTMP === null) return 0;
document.getElementById(attTMP).innerHTML += txtIN;
return 1;
},
// .......... [+] Load core module
load: function (pthIN, catIN) {
var valTMP = this.get(pthIN);
if (valTMP === 0) return 0;
if (this.add(valTMP, catIN) === 0) return 0;
return 1;
},
//// .......... Check if object is defined
//check: function (objIN) {
// if (typeof objIN !== 'object') return 0;
// return 1;
//},
};
还是这个
/*
FrameBee Framework version 0.2
THE LUMBERJACK . Global logger
*/
objLumberjack = {};
这里是脚本标记结果
<script class="FrameBee_Temp" id="FrameBee_Head_Script_Temp" type="text/javascript">
/*
FrameBee Framework version 0.2
THE MANAGER . Resources Manager
*/
objManager = {};
/*
FrameBee Framework version 0.2
THE LUMBERJACK . Global logger
*/
objLumberjack = {};
/*
FrameBee Framework version 0.2
THE RECRUITER . Resources Loader
*/
objRecruiter = {};
/*
FrameBee Framework version 0.2
THE SAGE . Classes guard
*/
objSage = {};
/*
FrameBee Framework version 0.2
THE ARCHITECT . Style definition
*/
objArchitect = {};
/*
FrameBee Framework version 0.2
THE AGENT . Style applyer
*/
objAgent = {};
</script>
/*
FrameBee框架版本0.2
经理。资源经理
*/
objManager={};
/*
FrameBee框架版本0.2
伐木工人。全局记录器
*/
objLumberjack={};
/*
FrameBee框架版本0.2
招聘人员。资源加载器
*/
objRecruiter={};
/*
FrameBee框架版本0.2
圣人。班长
*/
objSage={};
/*
FrameBee框架版本0.2
建筑师。样式定义
*/
objArchitect={};
/*
FrameBee框架版本0.2
代理人。样式应用程序
*/
objAgent={};
加载和执行之间有很大的区别。检查所有对象是否就绪的最佳位置是在DOMContentLoaded事件上。加载和执行之间有很大区别。检查所有对象是否就绪的最佳位置是DOMContentLoaded事件。我将使用Javascript加载所有核心模块,但我将改为JQuery。问题与xmlhttprequest方法和innerHtml方法有关。第一次,浏览器解释里面的代码。从第二个开始,只需添加内容。要继续这种方式,最好每次创建一个元素(脚本)并将其附加到头部
var elm = document.createElement('script');
elm.innerHtml = //content retrieved;
document.head.appendChild(elm);
我将使用Javascript加载所有核心模块,但我将改为JQuery。问题与xmlhttprequest方法和innerHtml方法有关。第一次,浏览器解释里面的代码。从第二个开始,只需添加内容。要继续这种方式,最好每次创建一个元素(脚本)并将其附加到头部
var elm = document.createElement('script');
elm.innerHtml = //content retrieved;
document.head.appendChild(elm);
请显示您的调用以及您拥有的其他对象。我刚刚在html文档的头部添加了脚本标记result。我无法理解为什么没有定义。您在哪里使用
var
将对象定义为变量?您的脚本有17个错误。看看你用什么来确保你的代码中没有错误?我没有,因为我不能在之后删除它们。我不知道为什么,但如果我用var声明它们,我就不能使用“delete objXXX;”。我使用Visual Studio Community 2013。我只是用括号和分号更新代码请显示您的调用,以及您拥有的其他对象。我只是在html文档的头部添加了脚本标记result。我无法理解为什么没有定义。您在哪里使用var
将对象定义为变量?您的脚本有17个错误。看看你用什么来确保你的代码中没有错误?我没有,因为我不能在之后删除它们。我不知道为什么,但如果我用var声明它们,我就不能使用“delete objXXX;”。我使用Visual Studio Community 2013。我只是用括号和分号更新了代码。我学到了一个新的有用的东西,谢谢。我将启动函数从window.onload移到document.addeventlistener。我没有成功anyway@giacomo您可以将启动函数直接移动到头部的script标记,使调用异步并创建DOMContentLoaded handler抱歉,我不明白。我将xmlhttprequest编辑为异步。我添加了一个实时示例,以便更容易调试。我学到了一个新的有用的东西,谢谢。我将启动函数从window.onload移到document.addeventlistener。我没有成功anyway@giacomo您可以将启动函数直接移动到头部的script标记,使调用异步并创建DOMContentLoaded handler抱歉,我不明白。我将xmlhttprequest编辑为异步。我添加了一个实时示例,以便更容易调试它。