Javascript 层叠对象声明从上的第二个对象提供未定义的typeof

Javascript 层叠对象声明从上的第二个对象提供未定义的typeof,javascript,object,undefined,typeof,Javascript,Object,Undefined,Typeof,我在项目中动态加载js文件,将其内容放在头部的脚本标记中。每个文件中只有一个对象。我注意到加载后,所有对象都在脚本标记中,但只有第一个未定义(我放置内容的顺序不会改变问题,第一个是对象,其他没有) 这是剧本 window.onload = function () {objMaster.end(objMaster.main());}; objMaster = { // ---------- MAIN main: function () { // S

我在项目中动态加载js文件,将其内容放在头部的脚本标记中。每个文件中只有一个对象。我注意到加载后,所有对象都在脚本标记中,但只有第一个未定义(我放置内容的顺序不会改变问题,第一个是对象,其他没有)

这是剧本

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编辑为异步。我添加了一个实时示例,以便更容易调试它。