【发布时间】:2016-01-13 20:00:30
【问题描述】:
我正在处理一个巨大的 JavaScript 代码库,我正在尝试重新组织它。我不是真正的专家,我刚开始研究良好的 javascript 编码实践。所以,我想做的一件事是将所有代码划分为模块。在这种特殊情况下,我正在尝试创建一个可以帮助我优化视频嵌入的模块。我想向模块传递一个 id 并从中接收一些 html 代码或图像。
我没有把整个代码放在这里,但是对于示例来说已经足够了:
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 javascript