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

use*_*291 1 javascript frameworks

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

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

Dan*_*llo 5

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

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

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

alert(myNamespace.somePublicMethod());
Run Code Online (Sandbox Code Playgroud)

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

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