JavaScript中的“命名空间”碰撞检测?

时间:2010-10-31 12:37:41

标签: javascript frameworks

模仿jQuery等命名空间的JavaScript框架是否会进行命名空间冲突检测?如果不是我应该自己管理它?

如果是,是什么阻止了这种框架自己检测这种碰撞?

2 个答案:

答案 0 :(得分:5)

JavaScript命名空间通常通过使用对象和闭包进行模仿,并且通常使用自调用函数进行初始化:

var myNamespace = (function () {
   var _name = 'Bob';

   return {
      somePublicMethod: function () {
         return 'Hello, ' + _name;
      }
   };
})();

alert(myNamespace.somePublicMethod());

不幸的是,如果重新定义命名空间变量,则没有任何警告。您真正要做的是检查是否已经定义了命名空间变量,如果是,则抛出异常或引发错误:

if (typeof myNamespace !== 'undefined') {
    var myNamespace = (function () {
        // ...
    })();
}
else {
    throw new Error("Whoops! myNamespace already exists.");
}

答案 1 :(得分:1)

考虑提出一个开发标准,整个团队同意如何调用命名空间。此外,我发现在实际实现数据结构或命名空间之前,检查数据结构或命名空间的任何更