JavaScript中函数的“重构”

添加评论 2007年7月16日

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

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

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

  1. 2007年7月16日 at 17:31 | #1

    大致明白是什么意思了…

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

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

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

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

  2. 2008年9月11日 at 16:22 | #2
    典型中国人想法

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

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

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

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

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

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

  1. 还没有 trackbacks
订阅评论