我遇到了很多关于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显然首先加载。毫无头绪。
答案 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;
}
});