2011-02-14 157 views
6

我有類似的文件說test.js:jQuery的辛格爾頓

(function($){  
$.test= function(){ 
    alert('test'); 
    } 
})(jQuery); 
jQuery.test(); 

現在,如果test.js在我的網頁即SRC在兩個不同的位置= test.js加載兩次,它給了兩次警報。我希望它像一個單身人士。任何想法如何實現這一目標?

+0

如果您嘗試避免兩次_calling_測試或_defining_測試兩次,有點不清楚。 – 2011-02-14 08:21:39

回答

7

使用條件的快捷方式。和&&後的rightside的代碼被執行,否則,它會直接跳過的一部分,另一個有用的模式可能看起來像:。

$.test = $.test || function() { 
    alert('test'); 
} 

這確實的實際上同樣的事情如果$.test已被定義其使用,否則將匿名功能分配給$.test。兩種版本都可以(也可能應該)進行優化,但不僅僅是檢查它們是否已定義,還包括是否來自function

0

你試過類似的東西嗎?

if(typeof $.test == "undefined") { 
    (function($){  
    $.test= function(){ 
     alert('test'); 
    } 
    })(jQuery); 
    jQuery.test(); 
} 
0
(function($){  
    $.test = function() { 
    if (!$.test.hasBeenRun) { 
     $.test.hasBeenRun = true; 
     alert('test'); 
    } 
    } 
    $.test.hasBeenRun = false; 
})(jQuery); 
jQuery.test(); 
0

你爲什麼不提取此共享代碼到第三個文件?

除此之外,它取決於代碼的作用。如果沒有定義$.test

(function($){  
    !$.test && $.test= function(){ 
     alert('test'); 
    } 
})(jQuery); 

jQuery.test(); 

!$.test計算爲true:一般來說,你可以換全功能的條件下,只有實行「如果有衝突的事情尚未進行