【发布时间】:2013-11-20 15:57:02
【问题描述】:
我在我的 Javascript 应用程序中使用模块模式,我想迁移到 RequireJS 和 AMD。
我目前的实现是这样的:
// Module main : Module.js
var myModule = (function(my, $, undefined) {
'use strict';
var m_privateMembers;
var m_stuff = new my.Pear({color:"green"});
//---------------------------------------
function privateFunctions(args) {
}
//-----------------------------------
my.publicFunctions = function(args) {
};
return my;
})(myModule || {}, jQuery);
// Module class Fruit : Module.Fruit.js
var myModule = (function(my, $, undefined) {
'use strict';
my.Fruit = Object.makeSubclass();
my.Fruit.prototype._init = function() {
};
my.Fruit.prototype.someClassFunction = function() {
};
return my;
})(myModule || {}, jQuery);
// Module class Pear : Module.Pear.js
var myModule = (function(my, $, undefined) {
'use strict';
my.Pear = Fruit.makeSubclass();
my.Pear.prototype._init = function(args) {
this.m_someClassMember = args;
};
my.Pear.prototype.someClassFunction = function() {
};
return my;
})(myModule || {}, jQuery);
在我的 index.html 中,我使用脚本 html 标记来包含我的不同模块文件,并且一切正常。
我的问题是:
1/ 为什么RequireJS系统比这个多脚本标签系统更好?
使用我目前的 RequireJS 方法:
define(['jquery'], function($) {
var myModule = (function(my, $, undefined) {
'use strict';
var m_privateMembers;
var m_stuff = new my.Pear({color:"green"});
//---------------------------------------
function privateFunctions(args) {
}
//-----------------------------------
my.publicFunctions = function(args) {
};
return my;
})(myModule || {}, $);
return myModule;
});
2/ 我如何迁移到 RequireJS 模块并保持我的实际模块通过嵌入式子类提供的类似单例的模式?
显然有几个问题:
2.1/ *m_stuff 无法实例化my.Pear,不知道怎么用require 将模块拆分成几个文件?*
2.2/ 如果我有两个其他模块都依赖于 myModule,那么 myModule 变量是否会是这些模块中的同一个实例(因为 myModule 不再位于全局范围内)? p>
编辑:这个快速模式说明了我需要在一个更复杂的框架中做些什么:
【问题讨论】:
标签: javascript requirejs js-amd