我正在使用带有JavaScript的揭示模块模式在我当前的项目中组织我的代码,但我想知道我是否可以更好地使用它,因为我似乎创建了许多私有方法,然后在一个私有方法中调用它们线性方式,即当一个方法执行其操作然后调用另一个方法然后调用另一个方法,依此类推。
代码可以工作,但是想知道它是否可以更好,更高效或用更少的代码来实现相同的结果。
示例模块将位于我们需要的位置:
将元数据重置为原始值
icisSite.tabPageView = function($){
var $tabs = $('.tbc .tbc-tabs > div'),
pageName = $('meta[name=gwa_pageName]'),
sec3 = $('meta[name=gwa_siteSection3]'),
sec4 = $('meta[name=gwa_siteSection4]'),
pageNameLen = pageName.length,
sec3Len = sec3.length,
sec4Len = sec4.length,
txt,
pNameContent,
pNameConstruct,
section,
metaContent,
metaConstruct;
function init() {
bindClickHandlerToTabs();
};
function bindClickHandlerToTabs() {
if (pageNameLen !== 0 && (sec3Len !== 0 || sec4Len !== 0)){
$tabs.bind('click', updateMetaData(){
txt = $(this).find('span').text(),
txt = ' | ' + txt;
updateMetaData();
});
} else {
return false;
}
};
function updateMetaData(){
pNameContent = pageName.attr('content'),
pNameConstruct = pNameContent + txt;
if (sec3Len !== 0 && sec4Len !== 0){
section = 'gwa_siteSection4',
metaContent = sec4.attr('content'),
metaConstruct = metaContent + txt;
} else {
section = 'gwa_siteSection3'
metaContent = sec3.attr('content'),
metaConstruct = metaContent + txt;
}
return callGWATrackingFucntions();
};
function callGWATrackingFucntions() {
gwa_SetMetaValue(section, metaConstruct);
gwa_trackPageView(pNameConstruct);
return resetMetaData();
};
function resetMetaData() {
pageName.attr('content', pNameContent);
$('meta').each(function(index){
var name = $(this).attr('name');
if (section === name){
$(this).attr('content', metaContent);
}
});
};
return {
init: init
};
}(jQuery);
icisSite.tabPageView.init();
答案 0 :(得分:2)
如果要创建仅调用一次的函数,则需要询问它们为什么是函数而不仅仅是顺序代码。也许是为了可扩展性或模块化。额外的函数调用并不是特别重要。
通过更改以下内容中固有的多功能调用,您可以极大地提高效率(尽管可能并不显着):
$(this).attr('content', metaContent);
直接访问属性:
this.content = metaContent;
除非您打算修改HTML内容属性(这不太可能)而不是DOM属性(我不知道 attr 方法在这种情况下实际会改变哪一个)。
jQuery即将对备受诟病的 attr 方法进行一些重大更改,除非你真的需要(几乎从不),否则不使用它总是一个好主意。