基础学习

1)js语法必须会

  1. js基本语法,都是c语系的,有其他语言背景学习起来相对更简单
  2. 常见用法,比如正则,比如数据结构,尤其是数组的几种用法。比如bind/call/apply等等
  3. 面向对象写法。js是基于对象的,所以它的oo写起来非常诡异。参见红皮书JavaScript高级编程,很多框架都是自己实现oo基础框架,比如ext-core等。

犀牛书,《JavaScript权威指南》,没事就多翻翻,看多少遍都不为过。

2)个人学习和技术选型都要循序渐进

  1. 先能写,采用面向过程写法,简单理解就是定义一堆function,然后调用,非常简单
  2. 然后再追求更好的写法,可以面向对象。对于规模化的编程来说,oo是有它的优势的,一般java、c#,ruby这些语言里都有面向对象,所以后端更习惯,但对于语言经验不那么强的前端来说算高级技巧。
  3. 等oo玩腻了,可以有更好的追求:函数式编程,无论编程思维,还是用法上都对已有的编程思维是个挑战。我很喜欢函数式,但不太会在团队里使用,毕竟oo阶段还没完全掌握,风险会比较大。但如果团队水平都非常高了,团队稳定是可以用的。

可以看出我的思路,先能写,然后再追求更好的写法,比如面向对象。等团队水平到一定程度了,并且稳定的时候,可以考虑更加极致的函数式写法。

团队是这样选型的,个人学习也这样,最好是循序渐进,步子迈大了不好。

3)各种高级的JavaScript友好语言

JavaScript友好语言指的是能够使用其他语法实现,但最终编译成js的语言。自从Node.js出现后,这种黑科技层出不穷。比如比较有名的coffee、typescript、babel(es)等。

CoffeeScript虽然也是JavaScript友好语言,但其语法借鉴ruby,崇尚极简,对于类型和OO机制上还是偏弱,而且这么多年也没发展起来,仍然是比较小众的活着。未来比例会越来越少的。

显然TypeScript会越来越好,TypeScript 的强大之处是要用过才知道的。

  • 1)规模化编程,像Java那种,静态类型,面向对象,前端只有TypeScript能做到
  • 2)亲爹是微软安德斯·海尔斯伯格,不知道此人的请看borland传奇去
  • 3)开源,未来很好
  • 4)组合拳:TypeScript + VSCode = 神器

当下前端发展速度极快,以指数级的曲线增长。以前可能1年都不一定有一项新技术,现在可能每个月都有。大前端,Node全栈,架构演进等等都在快速变化。可以说,前端越复杂,有越多的不确定性,TypeScript的机会就越大。

4)再论面向对象

面向对象想用好也不容易的,而且js里有各种实现,真是让人眼花缭乱。

  • 基于原型的写法,纵观JavaScript高级编程,就是翻来覆去的讲这个,这个很基础,但不是很好用。可以不用,但不可以不会。
  • 自己写面向对象机制是最好的,但不是每个人都有这个能力的。好在es6规范出了更好一点的面向对象,通过class、extends、super关键字来定义类,已经明显好很多了,虽然还很弱,但起码勉强能用起来了。从面向过程走过来的同学,推荐这种写法,简单易用。但要注意面向对象要有面向对象的写法,要理解抽象,继承,封装,多态4个基本特征。如果想用好,你甚至还需要看一些设计模式相关的书。好在有《JavaScript设计模式》一书。Koa2里已经在用这种写法了。
  • js是脚本语言,解释即可执行。所以它的最大缺点是没有类型系统,这在规模化编程里是非常危险的,一个函数,传参就能玩死人。于是现在流行使用flow和typescript来做类型校验。flow只是工具,比较轻量级。而typescript是es6超集,给es6补充了类型系统和更完善的面向对象机制,所以大部分人都会对ts有好感,很有可能是未来的趋势。

对于es6高级特性,我是比较保守的,一般node长期支持版本lts支持的我都让用,一些更新的特性我一般不让使用。根本lts版本保持一致就好。

我的团队现在是采用es6的面向对象写法开发,后面会一点一点转到typescript上的。熟练oo转到ts是非常容易的。