其实今天我这里要说的并不是真正的重构,只不过是为了实现haphic说的这种功能:在不修改原系统JS文件的前提下让JS中的某些函数实现新的功能。
刚看到haphic的这个要求时我着实想了一阵子:如果在别的语言中,这不是什么问题,只要把该函数重构一下就搞定了,但JavaScript中却是不支持函数的重构的。
想了半天没找到解决方案,觉得还是先试一把吧,就写了一个简单的HTML文件(在外地网吧里,除了记事本没有什么可以做网页的东西,只好简单写一下了):
<html>
<body>
<script>
function aa()
{alert(‘aa’);}
function aa(m)
{alert(m);}aa();
aa(‘css’);
</script>
</body>
</html>
结果运行后发现第一次调用不能正确执行,第二次调用却是正确的。也就是说,用同样的函数名重定义函数后,第一次的定义就不起作用了(不管参数是否相同)。这样一来要想实现haphic的要求就简单了:
把要修改的函数写到一个单独的JS文件里(譬如要JS001.js),然后在模板中的Common.js后调用这个新的JS文件:
<script language=”JavaScript” src=”/script/common.js” type=”text/javascript”></script>
<script language=”JavaScript” src=”/script/common.js” type=”text/javascript”></script>
这样一来,原系统的JS没有修改,而其中的部分函数实际执行的代码却是新的了。基本上实现了haphic的要求,说是实现了所谓的JS函数的“重构”,其实只不过是重新定义了JS函数而已。
==============
当然,以上方法只是因为要求还使用原来的函数名(以尽可能少地让别的用户少改模板为目的),所以才造成了一点小困难,如果不是这么考虑的话,用新函数名,模板中调用时也改作新函数名,就不用考虑这么多麻烦事了~




大致明白是什么意思了…
以前就是这么处理的… 不过还是你提到的后入为主方便. 怎么把这茬口给忘啦. 呵呵.
谢谢小兔~
不能这么做,这么做不符合编程的思想的,如果不是ie浏览器呢
这种做法不可取的,正式所谓的“小聪明”
补充一句,完全取决与客户端的浏览器,而不是从html,js编程规范方面来考虑的!