我有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 格式来说,这可能有点多。