JavaScript - 在保持私有的同时提取功能

时间:2014-04-29 12:15:11

标签: javascript module-pattern

目前我有这样的结构:

(function(myScope) {
  myScope.public = function() {alert("I'm public!")};
  myScope.privileged = function() {alert("I can call private!"); private();};
  var private = function() {alert("I'm private!")};
})(window.myObj);

工作正常。 private无法访问外部世界,privileged可以调用它。但现在私有部分太大了,我希望将其解压缩出来。我想让它从外部无法访问,但它需要由特权函数调用。有没有办法实现这个目标?

更新

以上只是一个例子。一般的问题是,随着应用程序的扩展,单个js文件变得越来越长且难以管理。目标是将这样的js文件拆分为模块,而不会影响隐私。

1 个答案:

答案 0 :(得分:0)

您需要将代码分解为更小的部分。对于每件事,您可能希望使实例引用为local-scoped,但您可以从其他文件中导入类/代码/功能。

将您的示例炸成三个文件:

function makeAlerter(state) {
  return function() {
    alert("I'm "+state);
  };
}

(function(myScope) {
  var private = makeAlerter("private"); // not the whole private coding here
  myScope.privileged = function() { // but the privileged code needs to stay
    alert("I can call private!"); private();
  };
})(window.myObj);

(function(myScope) {
  myScope.public = function() {alert("I'm public!")};
})(window.myObj);