FeHelperWeb开发者助手 FeHelper

本插件支持Chrome、Firefox、MS-Edge浏览器,内部工具集持续增加,目前包括 JSON自动/手动格式化、JSON内容比对、代码美化与压缩、信息编解码转换、二维码生成与解码、图片Base64编解码转换、Markdown、 网页油猴、网页取色器、脑图(Xmind)等贴心工具,甚至在目前新版本的FeHelper中,还集成了FH开发者工具, 如果你也想自己搞一个工具集成到FeHelper中,那这一定能满足到你。另外,本站也提供部分工具的在线版本,欢迎使用,欢迎反馈!
点击按钮快速安装 Chrome版 Firefox版 Microsoft Edge版
FeHelper-version FeHelper-rating FeHelper-users
FeHelper 已在Github开源,也欢迎大家提issue,或者直接提交PR加入进来! 现在就去Github看看>> star fork

良好的Javascript编码规范,应该有“命名空间”的概念,即便在Javascript中,本身不存在。

如果一个WEB应用中,绑定到window对象下的子对象太多,显然是非常不好的,简单的说,需要归类,统一管理。


尤其在基于Javascript的模块化开发中,命名空间体现的尤为重要,Extjs和YUI在这方面的规范,非常值得借鉴。


百度空间的前端项目,每个页面都是被设计为一个独立的web应用,有其独立的命名空间;

对于元素较多,结构复杂的页面或分拆为多个模块,各模块具有单独的命名空间。


这里,把用作命名空间注册的方法摘出来:

/**
 * 注册命名空间
 * @param {String} fullNS 完整的命名空间字符串,如qui.dialog
 * @param {Boolean} isIgnorSelf 是否忽略自己,默认为false,不忽略
 * @author zhaoxianlie(xianliezhao@foxmail.com)
 * @example 
 *      window.registNS("QingFeed.Text.Bold");
 */
window.registNS = function(fullNS,isIgnorSelf){
    //命名空间合法性校验依据
    var reg = /^[_$a-z]+[_$a-z0-9]*/i;
        
    // 将命名空间切成N部分, 比如baidu.libs.Firefox等
    var nsArray = fullNS.split('.');
    var sEval = "";
    var sNS = "";
    var n = isIgnorSelf ? nsArray.length - 1 : nsArray.length;
    for (var i = 0; i < n; i++){
        //命名空间合法性校验
        if(!reg.test(nsArray[i])) {
            throw new Error("Invalid namespace:" + nsArray[i] + "");
            return ;
        }
        if (i != 0) sNS += ".";
        sNS += nsArray[i];
        // 依次创建构造命名空间对象(假如不存在的话)的语句
        sEval += "if(typeof(" + sNS + ")=='undefined') " + sNS + "=new Object();else " + sNS + ";";
    }
    //生成命名空间
    if (sEval != "") {
        return eval(sEval);
    }
    return {};
};