我正在开发一个 javascript 模块,我希望它是独立的。我还想使用 jQuery 提供的跨浏览器功能。如何在我的模块中包含 jQuery,而不与潜在的用户包含的 jQuery 发生冲突?
有没有通用的方法可以做到这一点,以便我可以将其他库添加到我的项目中而不与全局命名空间发生冲突?
最佳答案
我会尝试将所有 jQuery 复制到您的 JS 文件中,然后 running it in "no conflict" mode 。然后,如果您将整个 JS 文件包装在 immediately invoked function expression 中不带参数,您的 $
变量不会干扰全局范围。
因此,您的文件将类似于:
(function () {
// all of jQuery goes here
$.noConflict();
var $ = jQuery.noConflict();
// your code that uses $ here
})();
将所有内容包装在 IIFE 中将使您的 $
变量保持在本地,因此文件外部的任何代码都无法访问它。这可能有点极端,但应该可行。
编辑:我自己尝试过之后,我的上述解决方案是不正确的。
您实际上想要做的只是确保您的 jQuery 版本包含在用户的版本之前。然后在代码中运行 var myJQ = jQuery.noConflict();
并使用 myJQ
代替 $
或 jQuery
在您的代码中。 See this example.
关于javascript - 如何在我的 javascript 模块中包含 jquery 而不与全局命名空间发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782429/