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