我正在处理一个庞大的 JavaScript 代码库,试图对其进行重新组织。我并不是专家,刚开始学习良好的 JavaScript 编码实践。所以,我想做的一件事是将所有代码分成模块。在这个特定的例子中,我正在尝试创建一个模块,帮助我优化视频嵌入。我想传递一个 id 给模块,并从中获得一些 HTML 代码或图像。我没有把整个代码放在这里,但这已经足够作为示例了。
在另一个模块中,我将其分配给两个变量:
当然,我没有得到我期望的结果。在第二个
经过一些调查,我明白了我正在创建一个单例,即一个单一实例,并且我只在该实例内更改值。我认为我需要为我的模块创建一个构造函数,但我不确定如何与 IIFE 模式结合使用。这是否是正确的方法?
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 中返回。 - Quentin