说我有以下模块,跨多个文件分割既能够延伸skillet
:是否有可能让变量只显示“模块”及其扩展名?
File1.js:
(function(){
var privateVar1 = 0;
var privateFunction1 = function() {
//function definiton
};
skillet.fry() = function() {
//fry it
//matchbox.light();
};
})(window.skillet = window.skillet || {});
File2.js:
(function(){
var privateVar2 = 0;
var privateFunction2 = function() {
//some private function
};
skillet.grillIt = function() {
//grill It
//matchbox.strike(); <-- Shared with File1.js
};
})(window.skillet = window.skillet || {});
是否有可能共享变量/对象如matchbox
由两个模块共享没有绑定到window.matchbox
或window.skillet.matchbox
?即知名度的matchbox
应该只适用于File1.js和File2.js,并且不能在其他地方访问。我怀疑是否有可能,但有没有办法在JavaScript中实现这样的行为?如果不是,这方面的最佳做法是什么?
(它更像具有共享事件总线一组相关模块中,而不暴露全局该总线)
我还没有使用requirejs之前。你能否详细说明前两行的含义?封装是如何实现的? – PhD 2012-07-19 20:06:29
Require.js是一个JavaScript模块加载器,它遵循[异步模块定义(AMD)范例](http://requirejs.org/docs/whyamd.html)。通俗地说,这是一种在javascript的#include/import/using类型语法中定义模块依赖关系的方法。 我包装了File1.js的define()调用指定它取决于模块的“火柴盒”,一旦它完成非同步加载,它将作为参数“火柴盒”传递给函数。使用这种方法,不需要将您的火柴盒模块注册到全局名称空间。 – GreatTall1 2012-07-20 16:16:21