现在的位置: 首页工作学习>正文
JavaScript中函数的“重构”
发表于1665 天前 工作学习 评论数 2 ⁄ 被围观 289 views+

其实今天我这里要说的并不是真正的重构,只不过是为了实现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函数而已。

==============

当然,以上方法只是因为要求还使用原来的函数名(以尽可能少地让别的用户少改模板为目的),所以才造成了一点小困难,如果不是这么考虑的话,用新函数名,模板中调用时也改作新函数名,就不用考虑这么多麻烦事了~

目前有 2 条留言 其中:访客:2 条, 博主:0 条

  1. haphic : 2007年07月16日17:31:02  1楼 @回复 回复

    大致明白是什么意思了…

    用新函数名,模板中调用时也改作新函数名,就不用考虑这么多麻烦事了~

    以前就是这么处理的… 不过还是你提到的后入为主方便. 怎么把这茬口给忘啦. 呵呵.
    谢谢小兔~

    软件兔 于 2007-7-16 17:31:02 回复

    呵呵,这个谢什么呀,正好我也巩固了一下JS的知识嘛Grimace

  2. 典型中国人想法 : 2008年09月11日16:22:09  2楼 @回复 回复

    不能这么做,这么做不符合编程的思想的,如果不是ie浏览器呢

    这种做法不可取的,正式所谓的“小聪明”

    补充一句,完全取决与客户端的浏览器,而不是从html,js编程规范方面来考虑的!

    软件兔 于 2008-9-11 19:40:49 回复

    看来你根本没仔细看,并且根本没去试过,这与是否是IE没关系的。

    另外,生活中正是一些“小聪明”创造了奇迹。如果不用“小聪明”请问您有什么好的做法实现Haphic的要求?

给我留言

留言无头像?