我正在處理一個巨大的JavaScript代碼庫,我試圖重新組織。我不是一個真正的專家,我剛剛開始學習良好的JavaScript編碼實踐。所以,我試圖做的一件事是將模塊中的所有代碼分開。在這種特殊情況下,我試圖創建一個模塊來幫助我優化視頻嵌入。我想通過該模塊的ID並接收一些HTML代碼或圖像。如何創建IIFE Javascript模塊的多個實例?
我不會把整個代碼在這裏,但它是足夠的例子:
var videoIframe = (function($) {
'use strict';
var id,
setVideoId = function(videoId) {
id = videoId;
console.log(id);
},
getVideoThumbnail = function(videoId) {
setVideoId(videoId);
},
test = function() {
console.log(id)
},
getVideoEmbedCode = function() {
};
return {
test: test,
getVideoThumbnail: getVideoThumbnail
};
})(jQuery);
在另一個模塊我給它分配給兩個變量:
var video1 = videoIframe;
var video2 = videoIframe;
video1.getVideoThumbnail(123);
video2.getVideoThumbnail(456);
video1.test();
video2.test();
,當然,我沒有得到我的預期。在撥打第二個getVideoThumbnail
後,它總是打印456
。
做一些研究我明白我正在創建一個單例,一個單一的實例,我只改變該實例中的值。我想我需要一個構造函數來處理我的模塊,但我不知道如何將它與IIFE模式結合使用。這是正確的做法嗎?
那麼爲什麼你仍然保持你的例子IIFE? – Carlo
@Carlo - 因爲還有一件事情需要做一次(這是使'$'變量可用)。需要重複調用的代碼將移入它自己的函數中,並從IIFE返回。 – Quentin
好的,這是有道理的。謝謝 – Carlo