举个例子,我们组这半年使用Node, Gulp, Angular积攒了一些经验,前两天隔壁组有人来找我们开个技术交流会,他们在做一款内部工具,基于Web,浏览器运行。主要负责的哥们是个Java Developer,一小时的会,有五十分钟都在给我们展示他的project(主要由jQuery, RequireJS构成),一个简单的Toolbar和里面几个button,把jQuery的轮子全部重新造了一遍,主要业务逻辑还没影呢,轮子的unit test已经达到了98%的覆盖率,Code Review时言必谈design pattern。
然而他的JS里面所有的class都用 var ClassName = (function ( ) {return {props..., func...} }( ) ),貌似父类和子类的继承关系,也是通过jQuery.extend(parentLiteralObject, childLiteralObject)。我们提出为什么不用prototype实现class时,哥们说他们是用到了"JavaScript Reveal Pattern"。我连续几遍强调不管什么pattern,你的method都不在prototype上面,而是在各自的instance上面。
最后我发现,哥们其实并不了解什么是prototype,怎样在JS中实现class和继承,以及前端开发中什么交给库来做,什么是真正的业务逻辑,并且采用Java applet 和 Swing等面向过程的方式来进行web前端开发。甚至于在函数中做参数检测时还不看具体情况的统一使用if (param != null) 这种模糊的逻辑判定。
不敢说荼毒,但事倍功半是肯定的。