Javascript jQuery单例
我有一个类似于test.js的文件:Javascript jQuery单例,javascript,jquery,Javascript,Jquery,我有一个类似于test.js的文件: (function($){ $.test= function(){ alert('test'); } })(jQuery); jQuery.test(); 现在,如果test.js在我的页面中加载两次,即src=test.js在两个不同的位置,它会发出两次警报。我希望它像单身汉一样。关于如何实现这一点有什么想法吗?你有没有尝试过类似的方法 if(typeof $.test == "undefined") { (functi
(function($){
$.test= function(){
alert('test');
}
})(jQuery);
jQuery.test();
现在,如果test.js在我的页面中加载两次,即src=test.js在两个不同的位置,它会发出两次警报。我希望它像单身汉一样。关于如何实现这一点有什么想法吗?你有没有尝试过类似的方法
if(typeof $.test == "undefined") {
(function($){
$.test= function(){
alert('test');
}
})(jQuery);
jQuery.test();
}
为什么不将此共享代码提取到第三个文件中?
除此之外,这取决于代码的功能。通常,您可以将整个函数包装在一个条件中,仅在“尚未执行冲突的事情时”执行。使用条件快捷方式:
(function($){
!$.test && $.test= function(){
alert('test');
}
})(jQuery);
jQuery.test();
!$.test
的计算结果为true
,如果未定义$.test
,并且执行&
后右侧的代码。否则,它将跳过该部分。另一个有用的模式可能如下所示:
$.test = $.test || function() {
alert('test');
}
实际上,这也是一样的。如果已经定义了
$.test
,则将匿名函数分配给$.test
。两个版本都可以(而且可能应该)进行优化,但不仅要检查它们是否已定义,还要检查它们是否来自类型函数
。不清楚您是否正在尝试避免调用两次测试或定义两次测试。如果这是一个愚蠢的问题,请更正我,但为什么需要多次加载文件?为什么不将函数存储在变量中并在文档中需要时调用它?@squegy我调用并定义了两次测试。我只希望这样做一次。@helixed问题是有些用户两次包含JS文件,这会导致问题。我正在尝试解决这个问题。我所说的用户是指站点所有者。
$.test = $.test || function() {
alert('test');
}