刚上班时,对java的所谓的继承、接口之类的什么概念、思想几乎一窍不通,但随着工作的时间增加,虽然写的java代买屈指可数,但随着js脚本代码编写量的增加,对一些原来不理解的概念性的东西渐渐的有了自己理解,并开始尝试哪怕再简单的东西,也要仔细琢磨一番,找到一些更好的方法(即所谓思想)去解决。
曾将写过这样一个简单的全局的function:
function g_login(){
var href = window.location.href;
window.location.href = "/login.jsp?back="+href;
}
后来发现并不是所有地方都能用这个方法,比如在注册、登入页等,于是就得想办法怎么解决一下,第一反应就想到在需要特殊处理的页面重写一个go_login方法覆盖全局的同名方法,但却觉得有点不情愿,因为同样的功能,在多个地方用到,代码写在多处,如果后期要改或加一些额外的功能难免有遗漏,于是就修改如下:
function g_login(){
var href = _g_backUrl || window.location.href;
window.location.href = "/login.jsp?back="+href;
}
这样,如果哪个页面要对登入后的跳转地址作特殊处理,只要在页面定义变量 _g_backUrl即可,这样登入功能的口子开的比较小,也便于维护和控制。
至于把java接口的思想用于js,我曾经写过下面的代码:
function loadPage(sId,url){
$.get(url,function(html){
$("#"+sId).html(html);
if(typeof(initPage)=="function"){
initPage();
}
});
}
其作用是无刷新加载新的页面,局部更新当前页,但对于不同的页面在加载完之后可能需要做不同的脚本处理,如果要在主页面中根据url来处理写不同的代码处理,那将是一场噩梦,因为你无法预知会有多少个url会加进来,所以我就写了如上的代码,initPage可以认为是url页面的一个脚本函数,把每个url加载完要执行的代码全写在initPage,或有initPage再调用其他方法都也可,但主页面的逻辑就清晰了:不管什么页面,只要有initPage函数,就在加载完之后执行,当然没有的话就可以完全忽略。这种主页面中的initPage就类似于java中的接口定义,url的页面中的initPage定义就类似于接口的实现,把要做的事封装在initPage函数中,当页面加载完就由主页面调用执行,至于initPage做哪些事,主页面不用管、不该管、也管不了,这就不就是java接口与实现类的关系、就是目前我对java接口的理解吗?