如何避免javascript命名空间冲突?

时间:2013-03-27 18:28:43

标签: javascript javascript-framework

我有一个企业应用程序,可以在全局命名空间中导入一些java脚本库(假设是A)和一些函数。

我们的客户可以扩展我们的平台并导入jquery,这将导致命名空间冲突。

对我来说,最好的方法是帮助客户不要遇到命名空间冲突,因为jquery很受欢迎,每个客户都会使用它。

如何更改库A的命名空间?什么是最方便,最安全的方法。

5 个答案:

答案 0 :(得分:3)

对于jQuery,最简单的方法是使用jQuery.noConflict()来获取新的选择器变量而不是$。

var j$ = jQuery.noConflict();

j$('#test-id')

答案 1 :(得分:2)

您应该构建一个不允许客户影响全局空间的界面。

将客户的代码包装在自己的功能中。

(function () {
  var window, global;  // Keep these private to this function
  // Customer code here
])();

您需要为他们提供访问您的功能的界面,但您如何操作取决于您的应用程序,因此我无法提供示例。它可能就像传入一个参数一样简单,该参数可以访问包含需要由该客户代码操作的对象的对象。

现在,这不适用于所有事情。显然,您极大地限制了他们的代码可以访问的内容。您需要自己提供对该功能的访问权。

答案 2 :(得分:1)

使用此构造:

(function ($, a, b) {
   // ... place your code here   
})(jQuery, myLibraryA, otherLibraryB);

它被称为“匿名函数”,它创建了一个局部范围(内部声明的所有变量和函数都是本地的,不会干扰其他代码)。它导入三个库,jQuery,myLiberayA和otherLibraryB,在本地范围内,它们在名称$,a和b下可见。

答案 3 :(得分:0)

AdSafe也可能对您有用,有关详细信息,请参阅http://www.adsafe.org/

祝你好运

答案 4 :(得分:0)

如果你想使用第三方javascript库的组合,你也可以这样做: 基本上为每个对象创建另一个名称空间;

if(window.jQuery && !(window.MyjQuery)){
  var window['MyjQuery'] =  window.jQuery;
  var j$ = window['MyjQuery']; //alias

  j$(document).ready(function(){
    //code goes here...
  });

}