2011-08-15 41 views
0

我有一个主要的JavaScript文件,我们将调用core.js其他文件依赖。确定是否包含依赖JavaScript文件

在core.js中,我定义了一个对象,该对象将存在于相关文件中。

core.js:

(function(){ 
/* base package */ 
var core = window.core = function() { 
    // Throw an error, the core package cannot be instantiated. 
    throw new Error("A package cannot be instantiated"); 
}; 
})(); 

utils.js

/* utils package */ 
core.utils = function() { 
    // Throw an error, the core package cannot be instantiated. 
    throw("A package cannot be instantiated"); 
}; 

/** 
* Utility: StringUtils 
*/ 
core.utils.StringUtils = new Object(); 
core.utils.StringUtils.prototype = { 

    /** 
    * ltrim - Removes preceding whitespaces 
    */ 
    ltrim: function(value) { 
     var re = /\s*((\S+\s*)*)/; 
     return value.replace(re, "$1"); 

    }, 

    /** 
    * rtrim - Removes succeeding whitespaces 
    */ 
    rtrim: function(value) { 
     var re = /((\s*\S+)*)\s*/; 
     return value.replace(re, "$1"); 

    }, 

    /** 
    * trim - Removes preceding and succeeding whitespaces 
    */ 
    trim: function(value) { 
     return core.StringUtils.ltrim(core.StringUtils.rtrim(value)); 
    } 
}; 

目前,我加入了一个ID标签的标签<script />

<script id="core.js" src="core.js" type="text/javascript"></script> 

和检查它是存在的然后再定义core对象中的任何新项目。

(function() { 
    if (typeof (core) == 'undefined') { 
     var script = document.getElementById("core.js"); 
     if (script == null) 
      throw ("core.js is missing."); 
     else 
      throw ("Unknown Exception. core is undefined."); 
    } 
})(); 

我应该关心跨浏览器兼容性吗?它目前在IE9和FF5上工作,但我想确保它适用于所有浏览器。

是否有替代/更好的方式来确定文件是否被包含?

+1

'便宜'的替代方法是在“必须包含”文件中设置一个标记变量:'var core_is_loaded = true',并检查该变量的存在并获得适当的值。 –

+1

不是一个真正的答案,但为什么使核心,core.utils等功能,如果你不希望他们被实例化?简单的对象不会做? –

+0

@Chetan设计模式松散地基于Frank Zammetti的'Practical JavaScript,DOM Scripting and Ajax Projects'的第3章。为了正确的错误处理,我想抛出一个错误,允许任何使用脚本的人知道他们做错了什么,而不是通用的“对象不支持这个动作”。 – Utilitron

回答

1

这将工作正常,因为<script>标签是同步的任何Javascript后,该标签将有权访问core。如果你想要另一种做同样事情的方法,你可以采用Marc B的建议,并在core.js中设置一个标志。该标志也可以是核心对象的一部分,如core.is_loaded = true;然后,您只需在其他文件中检查if(core.is_loaded)

+0

我想远离在核心抛出错误或未实例化的情况下在内核中添加标志。如果核心存在,那么core.js必须已经加载。但是,如果核心不存在,则有超过1个原因比'core.js未加载' – Utilitron

相关问题