将大型公共 JavaScript 函数分解为较小的私有函数



我有JavaScript类,它有巨大的功能,很难维护。

2 个公共函数在启动时调用,然后在单击时调用。我想在这些公共函数中创建私有函数,例如闯入这些公共方法的一些私有函数范围。

var searchResultView;
var SearchResultView = function () {
    me = this;
    this.init = function () {
        // huge code
    }
    this.Search = function () {
        // huge code
    }
}
jQuery(function () {
    searchResultView = new SearchResultView();
    searchResultView.init();
    searchResultView.Search();
}

实现这一目标的最佳方法是什么。我尝试使用以下方法,但我认为这个嵌套函数不能很好地工作。

var searchResultView;
function searchResultView() {
    me = this;
    this.init = function () {
        var declareControls = function () {}
        var addEvents = function () {}
        var fillControls = function () {}
        declareControls();
        addEvents();
        fillControls();
    }
    this.Search = function () {
        var validateAndCreateCriteria = function () {
            if (!validateAandGetLocation()) {
                alert("invalid location");
                return false;
            }
            if (!validateAandGetCategory()) {
                alert("choose search type");
                return false;
            }
            var validateAandGetLocation = function () {}
            var validateAandGetCategory = function () {}
        }
        validateAndCreateCriteria();
    }
}
jQuery(function () {
    searchResultView = new searchResultView();
    searchResultView.init();
});

如果我理解正确,你应该有这样的函数:

var foo = (function() {
    var  privateBar = function() {  // private function
    },
    privatefooBar = function() {   // private function
    };
    return {
       publicFoo : function() {     //public function
           /* use privateBar and privatefooBar functions here */
       }
    };
})();

稍后publicFoo您可以使用

 foo.publicFoo();

但是您不能直接访问privateBar()privatefooBar()的内部函数,因为它们是私有函数。

更新的小提琴

分解函数很容易:

function f(..) {
  // many lines here
  return ret_f;
}

如果等效于

function f {
  function f1(..) {
    // not so many lines here
  }
  function f2(..) {
    // not so many lines here
  }
  var ret_f1 = f1(..);
  var ret_f2 = f2(..);
  // calculate ret_f from ret_f1 and ret_f2
  return ret_f;
}

或者,如果您更喜欢使用匿名函数的这种样式

function f {
  var f1 = function(..) {
        // not so many lines here
  };
  var f2 = function(..) {
        // not so many lines here
  };
  var ret_f1 = f1(..);
  var ret_f2 = f2(..);
  // calculate ret_f from ret_f1 and ret_f2
  return ret_f;
}

但是,我担心您的真正问题是特定于您现有的代码,并且是关于在那里提取哪些有用的较小函数以及如何组合它们。为此,需要拥有完整的代码并理解它。对于这种 QA 格式来说,这可能有点多。

最新更新