【发布时间】:2013-12-17 04:13:08
【问题描述】:
对于模块模式,我正在做类似的事情:
(function(namespace) {
// tons of code
// blabla
})(window.myGlobalNamespace);
如何拆分代码?我可以想到几种方法,比如使用命名空间的层次结构,或者将对象扩展到外部 window.myGlobalNamespace.additionalFunc = function () {//blabla}。还有哪些方法?优缺点都有什么?哪一个被认为是更好的做法?
这两个答案都建议使用 RequireJS。能否请您解释一下 RequireJS 是如何解决这些问题的:
first.js:
(function(context) {
var parentPrivate = 'parentPrivate';
})(window.myGlobalNamespace);
second.js:
(function(context) {
this.childFunction = console.log('trying to access parent private field: ' + parentPriavte);
}(window.myGlobalNamespace.subNamspace);
main.js:
window.myGlobalNamespace.subNamspace.childFunction(); // doesn't work
人们可以做到
window.myGlobalNamespace.subNamspace.childFunction = function() {alert("a new function");}
改变我的代码的行为!
这里有两个问题:
我们不能有一个儿童可以访问但外部公众不能访问的字段(即受保护的)。有什么办法可以做到吗?
如果不是,这意味着如果我们想让 eparentPrivate 可访问,我们需要将其公开。然后用户就可以修改了!
此外,所有公共功能都可以更改和替换。我不希望这种情况发生。
我不明白 RequireJS 是如何解决这些问题的。有人能解释一下吗?
【问题讨论】:
标签: javascript requirejs module-pattern revealing-module-pattern