包含jQuery函数并将它们添加到全局命名空间

时间:2014-12-17 19:54:01

标签: javascript jquery

我遇到了很多关于jquery的问题。我正在管理一个使用原型的旧应用程序。我的新页面不使用原型,但为了以防万一,我将内容封装在jquery.noConflict中。但是这导致我无法通过不同的js文件共享函数。

订单文件已加载:

jquery.js
jquery.commonFuncs.js
jquery.database.js

文件的示例内容

commonFuncs.js

var someGlobalVar = "abc";

jQuery.noConflict()(function($){

  function doStuff(x){
     return x;
  }

}); 

database.js

jQuery.noConflict()(function($){
  var a = 123;
  doStuff(a);
});

Error:未定义doStuff。

我可以理解为什么封装该函数会将其从全局命名空间中删除。我该如何添加回来?

如果我不加载prototype.js,我也不知道为什么我必须使用noConflict如果我完全删除prototype.js并删除noConflict封装,我得到$是未定义的,并且我不知道从哪里开始。 jQuery显然首先加载。毫无头绪。

2 个答案:

答案 0 :(得分:1)

正如Madbreaks提出的那样,下面的例子中应该有效。 (在Web浏览器控制台中查看没有错误消息。)

var someGlobalVar = "abc";
var myApp = {};

jQuery.noConflict()(function($){

  function doStuff(x){
     return x;
  }

  myApp.doStuff = doStuff;
}); 

jQuery.noConflict()(function($){
  var a = 123;
  //doStuff(a);
  console.log(myApp.doStuff(a));  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

您可以像这样重构代码:

 var someGlobalVar = "abc";
 var doStuff;
 jQuery.noConflict()(function($){

  doStuff = function(x){
     return x;
  }

 });