如果您曾经尝试使用相同的命名空间引入多个库,那么发生冲突的可能性可能会令人惊讶,并且令人沮丧的是,这些类型的错误通常会以令人惊讶且难以调试的方式出现方法。我认为您对冲突的直觉是正确的,关于是定义自己的命名空间还是重用他人的命名空间,最重要的考虑是尊重命名空间的所有权。这意味着除非您与维护另一个名称空间的人保持联系并且他们知道您在做什么,否则最好使用您自己的名称空间。
如果您确实决定忽略有关名称空间所有权的建议并在现有名称空间上定义 API(用于语义或其他),则需要考虑的一件事是使用导出函数来检测错误。基本上,您可以先在自己的命名空间上定义一些东西,然后将其导出到目标命名空间,如下所示:
MyApplication.exportName = function(objToExportTo, name, obj) {
if (objToExportTo[name] === undefined) {
objToExportTo[name] = obj;
} else {
// Possibly assert!
}
};
MyApplication.myCarouselFunction = function() { ... };
MyApplication.exportName($, 'myCarouselFunction', MyApplication.myCarouselFunction);